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

2009-06-19 Thread Deniz Dogan
2009/6/18 Deniz Dogan deniz.a.m.do...@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. However, I would really like some more control over what
file descriptors the subprocess should use (specifically stdout and
stderr). Looking at the source code for System.Process.system, I find
that it uses the syncProcess function, which would be useful to me,
but isn't exported.

So why is syncProcess not exported? Is there any good reason not to?

-- 
Deniz Dogan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Aycan iRiCAN

Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/18 Deniz Dogan deniz.a.m.do...@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 ()


Regards,
--
aycan

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Deniz Dogan
2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:

 Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/18 Deniz Dogan deniz.a.m.do...@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. Looking
at the source code for system, we see that it uses syncProcess,
which has #ifdef mingw32_HOST_OS (IIRC) in which the code you gave me
resides. If mingw32_HOST_OS is not defined, one has to go through
quite a bit more trouble to get the same effect.

This is why it bugs me a bit that syncProcess is not exported. I can't
find any reason not to export it, but what do I know?

-- 
Deniz Dogan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Aycan iRiCAN

Cum, 2009-06-19 tarihinde 12:42 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
 
  Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
  2009/6/18 Deniz Dogan deniz.a.m.do...@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.

ay...@aycan:~/haskell$ time ./deniz2  ps -ef | grep sleep
^C
real0m0.707s
user0m0.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.

Best Regards,
--
aycan

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Deniz Dogan
2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:

 Cum, 2009-06-19 tarihinde 12:42 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
 
  Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
  2009/6/18 Deniz Dogan deniz.a.m.do...@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.

 ay...@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
real0m10.005s
user0m0.003s
sys 0m0.003s
deniz14095 14047  0 13:05 pts/100: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

real0m0.915s
user0m0.003s
sys 0m0.000s

This is with GHC 6.10.3 on Arch Linux i686.

--
Deniz Dogan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Aycan iRiCAN

Cum, 2009-06-19 tarihinde 13:09 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
 
  Cum, 2009-06-19 tarihinde 12:42 +0200 saatinde, Deniz Dogan yazdı:
  2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
  
   Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
   2009/6/18 Deniz Dogan deniz.a.m.do...@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.
 
  ay...@aycan:~/haskell$ time ./deniz2  ps -ef | grep sleep
  ^C
  real0m0.707s
  user0m0.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
 deniz14095 14047  0 13:05 pts/100:00:00 grep sleep
 
 What's strange though is that when I hit C-c *twice*, I get this behavior:

Hmm, I think GHC RTS handles SIGINT. I recompiled with thread support and got 
the same behavour. 

See: http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Signals

When the interrupt signal is received, the default behaviour of
the runtime is to attempt to shut down the Haskell program
gracefully. It does this by calling interruptStgRts() in
rts/Schedule.c (see Commentary/Rts/Scheduler#ShuttingDown). If a
second interrupt signal is received, then we terminate the
process immediately; this is just in case the normal shutdown
procedure failed or hung for some reason, the user is always
able to stop the process with two control-C keystrokes.

You better install signal handlers using installHandler.

Best Regards,
--
aycan

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


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

2009-06-19 Thread Deniz Dogan
2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:

 Cum, 2009-06-19 tarihinde 13:09 +0200 saatinde, Deniz Dogan yazdı:
 2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
 
  Cum, 2009-06-19 tarihinde 12:42 +0200 saatinde, Deniz Dogan yazdı:
  2009/6/19 Aycan iRiCAN aycan.iri...@core.gen.tr:
  
   Cum, 2009-06-19 tarihinde 11:58 +0200 saatinde, Deniz Dogan yazdı:
   2009/6/18 Deniz Dogan deniz.a.m.do...@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.
 
  ay...@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:

 Hmm, I think GHC RTS handles SIGINT. I recompiled with thread support and got 
 the same behavour.

 See: http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Signals

        When the interrupt signal is received, the default behaviour of
        the runtime is to attempt to shut down the Haskell program
        gracefully. It does this by calling interruptStgRts() in
        rts/Schedule.c (see Commentary/Rts/Scheduler#ShuttingDown). If a
        second interrupt signal is received, then we terminate the
        process immediately; this is just in case the normal shutdown
        procedure failed or hung for some reason, the user is always
        able to stop the process with two control-C keystrokes.

 You better install signal handlers using installHandler.

 Best Regards,

But that's what syncProcess does when mingw32_HOST_OS is not defined.
Also, compiling without -threaded doesn't help the problem on my
machine, it still acts the same.

-- 
Deniz Dogan
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe