Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to let the child process live when parent process exited?

I want to use multiprocessing module to complete this.

when I do this, like:

    $ python my_process.py

I start a parent process, and then let the parent process spawn a child process,

then i want that the parent process exits itself, but the child process continues to work.

Allow me write a WRONG code to explain myself:

from multiprocessing import Process

def f(x):
    with open('out.dat', 'w') as f:
        f.write(x)

if __name__ == '__main__':
    p = Process(target=f, args=('bbb',))
    p.daemon = True    # This is key, set the daemon, then parent exits itself
    p.start()

    #p.join()    # This is WRONG code, just want to exlain what I mean.
    # the child processes will be killed, when father exit

So, how do i start a process that will not be killed when the parent process finishes?


20140714

Hi, you guys

My friend just told me a solution...

I just think...

Anyway, just let u see:

import os
os.system('python your_app.py&')    # SEE!? the & !!

this does work!!

like image 207
kkkkkk Avatar asked Jul 11 '14 09:07

kkkkkk


1 Answers

A trick: call os._exit to make parent process exit, in this way daemonic child processes will not be killed.

But there are some other side affects, described in the doc:

Exit the process with status n, without calling cleanup handlers, 
flushing stdio buffers, etc.

If you do not care about this, you can use it.

like image 187
WKPlus Avatar answered Oct 05 '22 06:10

WKPlus