我注意到,有時python不會在Popen和完成腳本之後終止子進程。如果腳本完成,子進程(由Popen提供)有時不想死。
代碼:
proc = subprocess.Popen([blablabla_dir + 'blablabla'],
stdin=None, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
cwd = None,
env = {'LD_LIBRARY_PATH': blablabla_dir + 'lib'})
raise Exception()
結果:
...
raise Exception()
Exception
但有時我:
$ ps aux | grep blablabla
symonen+ 2413 0.0 0.1 158572 11988 ? Sl 19:04 0:00 /home/qqq/dev/eee/build/debug/blablabla
symonen+ 2591 0.0 0.0 18636 944 pts/12 S+ 19:04 0:00 grep --color=auto blablabla
因此,我們有:如果蟒蛇 「有時間」,關閉過程(後拋出異常)然後處理完成。如果沒有,那麼沒有完成
所以問題:是存在的方式,使力殺死完成腳本後,所有子進程(例如,一些選項來運行腳本或其他一些方式)。我正在爲我的應用程序進行一些測試,並且在完成測試腳本後不想在系統中產生垃圾。
我指的只是Pyhon的一些方法。所以就像「從布什腳本運行腳本,然後從布什腳本中殺死所有垃圾」 - 不適合。
從我發送到所有創建的進程信號(15或9)是不好的方法。更準確地說,它是一種選擇,但它不能完全解決問題。當然,我通過信號關閉了我的應用程序。但是:如果在發送kill之前我們有未處理的異常,那麼腳本完成後我們將再次產生垃圾。
好主意(prctl + PR_SET_PDEATHSIG)。非常感謝你。 –
現在我找到了關於此的正確主題:http://stackoverflow.com/questions/1884941/killing-the-child-processes-with-the-parent-process謝謝。 –
如果我在我的過程中將PR_SET_PDEATHSIG設置爲SIGTERM,是否存在一些背面效應?通常它將作爲守護進程工作,也可以在不守護進程模式下從bash(帶有導出庫)調用。 –