[Haskell-cafe] How to terminate the process group of a processcreated with createProcess?

André Scholz andre.scholz at uni-bremen.de
Thu Jan 12 12:56:05 CET 2012


On 11.01.2012 at 23:08 Donn Cave wrote:
> Quoth Brandon Allbery <allbery.b at gmail.com>,
> ...
> 
> > terminateProcess passes on the semantics of kill(2); on SVID-compliant
> > (and I think POSIX.1-compliant) systems, the negative of the process
> > group leader's process ID is used to signal the process group.  Note
> > that you may need to arrange for your initial child process to invoke
> > setpgrp() to insure that the parent program is not part of the process
> > group.
> 
> ... and that stuff can be found in System.Posix.Process.  Support for
> POSIX killpg can be found in System.Posix.Signals, by the way in case
> you think that would make your intention more transparent.

I tried:

import System.Posix.Process
import System.Posix.Signals
import System.Process
import System.Process.Internals

terminateProcessGroup :: ProcessHandle -> IO ()
terminateProcessGroup ph = do
    let (ProcessHandle pmvar) = ph
    ph_ <- readMVar pmvar
    case ph_ of
        OpenHandle pid -> do  -- pid is a POSIX pid
            gid <- createProcessGroup pid
            signalProcessGroup 15 pid
        otherwise -> error "Somethings wrong."

but i get the error message:
"createProcessGroup: permission denied"

Is there a way around this permission problem?

Kind regards, 
André




More information about the Haskell-Cafe mailing list