python是否提供了一種方法來查找使用子流程產生的兒童流程子女,以便我可以正確殺死他們?如果不是,確保孩子的孩子死亡的好方法是什麼?用子流程來扼殺兒童的蟒蛇兒童
回答
不太容易,但如果您的應用程序在Linux上運行,你可以通過/ proc文件系統走,並建立其PPID所有PID的清單(父PID)相同的子。
感嘆。所以我認爲答案是沒有。謝謝。我會看看是否可以避免子進程派生(或自動殺死它們)。 – archgoon 2012-02-02 20:54:14
以下僅適用於UNIX:
調用子進程os.setsid()將使其成爲一個新的會話和新process group過程組長會議領導。發送一個SIGTERM到進程組將發送一個SIGTERM到這個子進程可能產生的所有子進程。
你可以使用subprocess.Popen(..., preexec_fn=os.setsid)
來做到這一點。例如:
import signal
import os
import subprocess
import time
PIPE = subprocess.PIPE
proc = subprocess.Popen('ls -laR /', shell=True,
preexec_fn=os.setsid,
stdout=PIPE, stderr=PIPE)
time.sleep(2)
os.killpg(proc.pid, signal.SIGTERM)
運行,這將不顯示輸出,但ps ax
將顯示子和它產生被終止ls -laR
。
但如果你註釋掉
preexec_fn=os.setsid
然後ps ax
會顯示類似
% ps ax | grep "ls -la"
5409 pts/3 S 0:00 /bin/sh -c ls -laR/
5410 pts/3 R 0:05 ls -laR/
因此,沒有os.setsid
,ls -laR
和產生它仍在運行的外殼。一定要殺死他們:
% kill 5409
% kill 5410
謝謝,這幫助我消滅了一個產生自己進程的子進程。 – flinz 2016-04-08 08:54:32
- 1. 兒童內部角兒童
- 2. 解析兒童Simplexml兒童
- 3. JTree的兒童增加兒童對兒童等
- 4. 兒童兒童enumerateChildNodes(withName:使用:)
- 5. 計算兒童兒童的軌跡
- 6. 兒童
- 7. 在sitecore中獲取兒童兒童
- 8. 懶惰加載兒童兒童(EF)
- 9. XPath來選擇特定的兒童與兒童父母
- 10. 的Linq:兒童
- 11. SKNode子類不流動兒童
- 12. Grails:兒童的孩子
- 13. SSH的叉子和兒童
- 14. 失蹤兒童
- 15. @PreAuthorize兒童類
- 16. 選擇兒童
- 17. 兒童枚舉
- 18. 兒童ContextMenuStrip
- 19. 與兒童
- 20. 兒童法
- 21. 對兒童
- 22. XML與兒童()
- 23. 定製兒童
- 24. 兒童功能
- 25. TreeView兒童
- 26. Winforms + MDI兒童
- 27. C++:兒童型
- 28. Jinja2兒童
- 29. 訪問兒童
- 30. 從兒童SWF
不完全是這個副本(因爲它只是說不要調用shell。我正在尋找一種方法來獲取衍生子進程的子節點,python衍生進程是已經被直接調用):http://stackoverflow.com/questions/2638909/killing-a-subprocess-including-its-children-from-python – archgoon 2012-02-02 18:15:00