background child process

Discussion in 'Ruby' started by Joel VanderWerf, Jan 2, 2004.

  1. How can one start a background child process in a platform independent
    manner (i.e., no fork)?

    With 'system "something&"', the process is started in the background,
    but it is not a child, so I can't wait for it to finish:

    $ ruby -e 'system "sleep 5&"; Process.wait'
    -e:1:in `wait': No child processes (Errno::ECHILD)
    from -e:1

    Anyway, I don't know if the 'system "something&"' construct even works
    on windows (I'm not near a windows box today, or I'd test it).

    Can I do this with pipes? How will I know when the child has exited or died?

    I'm reluctant to use pipes because I don't care about stdin/stdout and
    don't want to worry about whether win32 support is ok. I don't need
    pipes for commuication, since I'm communicating among processes by
    writing and reading locked files. Aside from that, all I need to know
    from the child is when it is done. (That's the only reason I wanted it
    to be a child in the first place, so that I could use Process.wait or
    Process.waitpid on it.)

    Thanks for any suggestions....
     
    Joel VanderWerf, Jan 2, 2004
    #1
    1. Advertising

  2. Joel VanderWerf

    Guest

    Hi,

    At Sat, 3 Jan 2004 07:32:51 +0900,
    Joel VanderWerf wrote:
    > How can one start a background child process in a platform independent
    > manner (i.e., no fork)?


    I agree it should be there and kind of feel I've suggested it a
    couple times.

    > Anyway, I don't know if the 'system "something&"' construct even works
    > on windows (I'm not near a windows box today, or I'd test it).


    No.

    > Can I do this with pipes? How will I know when the child has exited or died?


    $ ruby -e 'f = IO.popen("sleep 5"); p Process.waitpid(f.pid); p $?'
    14425
    #<Process::Status: pid=14425,exited(0)>

    > I'm reluctant to use pipes because I don't care about stdin/stdout and
    > don't want to worry about whether win32 support is ok. I don't need
    > pipes for commuication, since I'm communicating among processes by
    > writing and reading locked files. Aside from that, all I need to know
    > from the child is when it is done. (That's the only reason I wanted it
    > to be a child in the first place, so that I could use Process.wait or
    > Process.waitpid on it.)


    IO.popen works on also Windows.

    --
    Nobu Nakada
     
    , Jan 5, 2004
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jeff Rodriguez
    Replies:
    23
    Views:
    1,158
    David Schwartz
    Dec 9, 2003
  2. empriser
    Replies:
    1
    Views:
    650
    Ian Collins
    Mar 6, 2007
  3. Paul Clements
    Replies:
    2
    Views:
    205
    Ben Morrow
    Feb 11, 2004
  4. Replies:
    14
    Views:
    253
    Martijn Lievaart
    Aug 15, 2009
  5. Z W
    Replies:
    0
    Views:
    182
Loading...

Share This Page