Detecting problems in a forked process

Discussion in 'Python' started by James Colannino, Dec 29, 2005.

  1. Hey everyone. I'm writing a small application in Python that uses
    os.fork() to create a separate process in which another application is
    run in the background. The problem is that I need to know whether or
    not that separate application managed to start and return from within
    the parent appropriately. Here's, roughly, a pseudo example of what I
    want to do (I know the code itself is not correct):

    def function():

    pid = os.fork()

    if pid:
    do parent stuff
    else:
    try:
    execute the application
    exeption:
    somehow return -1 from within the parent process

    #try to start another application in the background from within a forked
    process
    if (function() == -1):
    fail

    Is there a way that I can do this? I thought, only for a *VERY* brief
    second, about cheating my way around this with a global variable, but
    then I realized that this wouldn't work due to the fact that I will have
    multiple forks doing the same thing at the same time. Thanks in advance :)

    James

    --
    My blog: http://www.crazydrclaw.com/
    My homepage: http://james.colannino.org/

    "If Carpenters made houses the way programmers design programs, the first woodpecker to come along would destroy all of civilization." --Computer Proverb
    James Colannino, Dec 29, 2005
    #1
    1. Advertising

  2. James Colannino

    Jim Segrave Guest

    In article <>,
    James Colannino <> wrote:
    >Hey everyone. I'm writing a small application in Python that uses
    >os.fork() to create a separate process in which another application is
    >run in the background. The problem is that I need to know whether or
    >not that separate application managed to start and return from within
    >the parent appropriately. Here's, roughly, a pseudo example of what I
    >want to do (I know the code itself is not correct):
    >
    >def function():
    >
    > pid = os.fork()
    >
    > if pid:
    > do parent stuff
    > else:
    > try:
    > execute the application
    > exeption:
    > somehow return -1 from within the parent process
    >
    >#try to start another application in the background from within a forked
    >process
    >if (function() == -1):
    > fail
    >
    >Is there a way that I can do this? I thought, only for a *VERY* brief
    >second, about cheating my way around this with a global variable, but
    >then I realized that this wouldn't work due to the fact that I will have
    >multiple forks doing the same thing at the same time. Thanks in advance :)


    options:

    Have the child set it's exit code to indicate success or failure and
    use one of the various os.wait functions in the parent to retrieve it.

    or

    create a pipe before forking and you can pass data back and forth
    between the parent and child

    or

    look at one of the shared memory libraries



    --
    Jim Segrave ()
    Jim Segrave, Dec 29, 2005
    #2
    1. Advertising

  3. James Colannino

    Donn Cave Guest

    Quoth Jim Segrave <>:
    | In article <>,
    | James Colannino <> wrote:
    |> Hey everyone. I'm writing a small application in Python that uses
    |> os.fork() to create a separate process in which another application is
    |> run in the background. The problem is that I need to know whether or
    |> not that separate application managed to start and return from within
    |> the parent appropriately.
    ....
    |> Is there a way that I can do this? I thought, only for a *VERY* brief
    |> second, about cheating my way around this with a global variable, but
    |> then I realized that this wouldn't work due to the fact that I will have
    |> multiple forks doing the same thing at the same time. Thanks in advance :)

    If your thought there had continued for another second or two, you
    probably would have wondered whether variables are shared between
    forks. (Actually they are, but only as an optimization - changes
    are not shared.)

    | options:
    |
    | Have the child set it's exit code to indicate success or failure and
    | use one of the various os.wait functions in the parent to retrieve it.

    This is the simplest, as long as it's easy to wait long enough to reliably
    catch the failure case.

    | create a pipe before forking and you can pass data back and forth
    | between the parent and child

    If you want the parent to wait for errors right up to the successful
    execve(), and then continue, you can set the 'close on exec' flag on
    the pipe write end file descriptor and make sure no process holds
    this open but the child fork. See the subprocess module for example
    code (or just use the subprocess module, if it's supported in the
    deployed Python version.)

    Donn Cave,
    Donn Cave, Dec 30, 2005
    #3
    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. RL
    Replies:
    2
    Views:
    595
  2. Replies:
    2
    Views:
    423
    Chris Croughton
    Apr 13, 2005
  3. John Lin
    Replies:
    19
    Views:
    567
    Donn Cave
    Sep 25, 2003
  4. Alexander N. Spitzer
    Replies:
    1
    Views:
    532
    Lawrence Kirby
    Nov 12, 2004
  5. Replies:
    2
    Views:
    502
    Chris Croughton
    Apr 13, 2005
Loading...

Share This Page