[Haskell-cafe] Re: Running a "sub-process" which dies with the main program

Deniz Dogan deniz.a.m.dogan at gmail.com
Fri Jun 19 07:09:21 EDT 2009


2009/6/19 Aycan iRiCAN <aycan.irican at core.gen.tr>:
>
> Cum, 2009-06-19 tarihinde 12:42 +0200 saatinde, Deniz Dogan yazdı:
>> 2009/6/19 Aycan iRiCAN <aycan.irican at core.gen.tr>:
>> >
>> > Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
>> >> 2009/6/18 Deniz Dogan <deniz.a.m.dogan at gmail.com>:
>> >> > Hi
>> >> >
>> >> > I couldn't come up with a better subject than this one, so anyways...
>> >> >
>> >> > I have a small program which spawns a subprocess. However, when I hit
>> >> > C-c, the subprocess won't die, instead it will just keep running until
>> >> > it's done or until I kill it. I've looked around in System.Process for
>> >> > something suitable for my needs, but I can't seem to find it. Any
>> >> > ideas?
>> >>
>> >> With a tip from a person outside of the mailing list I found
>> >> System.Process.system, which essentially does exactly what I was
>> >> asking for.
>> >
>> > Hey I'm already subscribed :) You can read from "sout" and "serr" with
>> > below example. Hope that it helps.
>> >
>> >
>> > module Main where
>> >
>> > import System.Process  -- using process-1.0.1.1
>> >
>> > main = do
>> >  (_, sout, serr, p) <- createProcess (proc "sleep" ["10"])
>> >                        { std_out = CreatePipe
>> >                        , std_err = CreatePipe }
>> >  r <- waitForProcess p
>> >  return ()
>> >
>>
>> Thanks!
>>
>> But this was the approach I used before I went to
>> System.Process.system and it did not work on my Linux machine.
>
> Give it a try. Try to send CTRL-C and look if "sleep 10" (which is a
> subprocess) process terminates.
>
> aycan at aycan:~/haskell$ time ./deniz2 && ps -ef | grep sleep
> ^C
> real    0m0.707s
> user    0m0.001s
> sys     0m0.004s
>   aycan 13098  4430   0 13:50:23 pts/7       0:00 grep sleep
>
> It terminates with ghc 6.10.3 on OpenSolaris.

This is copied verbatim from my terminal. I used the exact some code
that you gave me.

% time ./test && ps -ef | grep sleep
^C
real	0m10.005s
user	0m0.003s
sys	0m0.003s
deniz    14095 14047  0 13:05 pts/1    00:00:00 grep sleep

What's strange though is that when I hit C-c *twice*, I get this behavior:

time ./test && ps -ef | grep sleep
^C^C

real	0m0.915s
user	0m0.003s
sys	0m0.000s

This is with GHC 6.10.3 on Arch Linux i686.

--
Deniz Dogan


More information about the Haskell-Cafe mailing list