how to detach process

Dilton McGowan II diltonm at pacbell.net
Sun Aug 25 08:26:29 CEST 2002


"Noah" <noah at noah.org> wrote in message
news:c9d82136.0208232259.4191800 at posting.google.com...
> 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

Could this technique be used by someone as a CGI parasitical spawn, sucking
CPU cycles long after the original CGI died?





More information about the Python-list mailing list