linux 父子进程结束,Linux下让父进程结束后,子进程自动结束
在多進(jìn)程編程的時(shí)候,經(jīng)常會(huì)遇到這樣的情況。父進(jìn)程創(chuàng)建了一堆子進(jìn)程,當(dāng)遇到錯(cuò)誤或者操作失誤的時(shí)候把父進(jìn)程關(guān)閉了,但是子進(jìn)程還在跑,不得不一個(gè)一個(gè)地殺死子進(jìn)程,或者使用ps,grep,awk,kill來(lái)配合批量殺死。
之前在寫 xxfpm(一個(gè)PHP-CGI的進(jìn)程管理) 的時(shí)候,在Linux下使用父進(jìn)程給子進(jìn)程信號(hào)通知的方式來(lái)達(dá)到用戶殺死父進(jìn)程時(shí),子進(jìn)程也隨即關(guān)閉。但是這種方法不太完美。例如,如果父進(jìn)程被KILL信號(hào)殺死,完全沒(méi)有機(jī)會(huì)給子進(jìn)程發(fā)送信號(hào)了。
在網(wǎng)上搜了一下,用Linux下libc的prctl設(shè)置PR_SET_PDEATHSIG屬性,似乎可以讓子進(jìn)程在父進(jìn)程自動(dòng)結(jié)束后接收到信號(hào)。這個(gè)方法似乎很完美!!!
PR_SET_PDEATHSIG (since Linux 2.1.57)
Set the parent process death signal of the calling process to arg2
(either a signal value in the range 1..maxsig, or 0 to clear). This is
the signal that the calling process will get when its parent dies.
This value is cleared for the child of a fork(2).
測(cè)試代碼:
view plaincopy to clipboardprint?
01.#!/usr/bin/env python
02.
03.import os
04.import ctypes
05.import time
06.
07.libc = ctypes.CDLL('libc.so.6')
08.
09.for i in xrange(4):
10. pid = os.fork()
11. if pid == 0:
12. libc.prctl(1, 15)
13. while True:
14. print 'Child:', i
15. time.sleep(1)
16. raise SystemExit
17.
18.print 'Wait for 10 sec...'
19.time.sleep(10)
20.print 'Exit'
總結(jié)
以上是生活随笔為你收集整理的linux 父子进程结束,Linux下让父进程结束后,子进程自动结束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python socketio_pyth
- 下一篇: windows怎么打开python_wi