2
我正在寫代碼來殺死進程和所有子進程。什麼PID os.killpg尋找
根據this post,所有兒童過程可以在同一過程中組內通過使用os.killpg(pro.pid, signal.SIGTERM)
在測試期間死亡,我發起手動此過程中產生了5子進程。
UID PID PPID C STIME TTY TIME CMD
ddd 25066 19475 0 Nov03 ? 00:00:00 /bin/sh -c gtdownload -c ~/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/download/ab0e89b4-5310-11e4-88da-adc9fc308db6 2
ddd 25067 25066 0 Nov03 ? 00:00:07 /rsrch1/rists/djiao/apps/cghub/libexec/gtdownload -c /rsrch1/rists/djiao/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/d
ddd 25073 25067 0 Nov03 ? 00:00:18 /rsrch1/rists/djiao/apps/cghub/libexec/gtdownload -c /rsrch1/rists/djiao/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/d
ddd 25077 25067 0 Nov03 ? 00:00:18 /rsrch1/rists/djiao/apps/cghub/libexec/gtdownload -c /rsrch1/rists/djiao/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/d
ddd 25081 25067 0 Nov03 ? 00:00:18 /rsrch1/rists/djiao/apps/cghub/libexec/gtdownload -c /rsrch1/rists/djiao/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/d
ddd 25085 25067 0 Nov03 ? 00:00:18 /rsrch1/rists/djiao/apps/cghub/libexec/gtdownload -c /rsrch1/rists/djiao/.cghub.key --max-children 4 -vv -d https://cghub.ucsc.edu/cghub/data/analysis/d
然而,當我跑os.killpg(25066,signal.SIGTERM),I得到了錯誤 「OSERROR:[錯誤3]沒有這樣的過程」。爲什麼找不到具有該ID的流程?
在鏈接後,你有沒有看到他們怎麼叫'Popen'?特別是'preexec_fn = os.setsid'很重要。 –
我認爲這一步只是啓動過程。一旦啓動,它將會分配一個PID。在我的真實代碼中,我確實使用了Popen和setsid。我只是想首先測試killpg並查看它實際上殺死了什麼 – Nasreddin
'killpg'向進程組中的所有進程發送信號,並獲取進程組ID。 'setsid'創建一個新的進程組,其id等於進程的PID。如果你不運行'setsid',將不會有'killpg'發送到的進程組(因此發生錯誤)。 –