how to detach process

Noah noah at noah.org
Sat Aug 24 08:59:24 CEST 2002


alienoid <alienoid at is.lg.ua> wrote in message news:<mailman.1030137902.27254.python-list at python.org>...
> Hello python-list users,
> 
> I need your help with this case:
> Program from comp A calls program written in python on comp B. The
> program on comp B calls program C and should quit and not beeing
> blocked waiting when program C finish(program C will be a long running
> task). What mechanism in python should I use in program B to implement
> that?
> 
> Thanks in advance

I'm not sure what comp A has to do with it. 
It seems that your problem is the same even if described without comp A.

It sounds like you want to create a daemon process using Python.
In UNIX this requires a "double fork" to detatch a process
from the controlling terminal (login shell). The following code
gives the basic daemon outline. In your case you would probably want the
main() function to exec program C. See the os module for 'exec' functions.
There are many of them:
    execl, execle, execlp, execlpe, execv, execve, execvp, execvpe

### DAEMON ###################################################################
import os, sys, time

def main ():
    '''This is the main function run by the daemon.
    This just writes the process id to a file then
    sits in a loop and writes numbers to the file once a second.
    You could also put an exec in here to switch to a different program.
    '''
    fout = open ('daemon', 'a')
    fout.write ('daemon started with pid %d\n' % os.getpid())
    c = 0
    while 1:
        fout.write ('Count: %d\n' % c)
        fout.flush()
        c = c + 1
        time.sleep(1)

#
# This is interesting section that does the daemon magic.
#
pid = os.fork ()
if pid == 0: # if pid is child
    os.setsid() # Start new process group.
    pid = os.fork () Second fork will start detatched process.
    if pid == 0: # if pid is child
        main ()

### END ######################################################################

Yours,
Noah Spurrier



More information about the Python-list mailing list