2014-02-14 185 views
0

我正試圖在集羣上實現一個像扭矩PBS一樣的工作排隊系統。python殺死所有的子進程,甚至父母已經退出

一個要求是殺死所有的子過程,即使父母已經退出。這很重要,因爲如果某人的工作沒有等待其子進程結束,有意或無意地,子進程變成孤兒並被進程init採納,那麼很難追查子進程並將其殺掉。

但是,我想出了一個解決這個問題的技巧,神奇的特質就是子進程的cpu親和力,因爲所有的子進程與父進程具有相同的cpu親緣關係。但這並不完美,因爲CPU親和力也可以有意改變。

我想知道是否有其他任何由父進程和它的後代共享,同時一成不變

+0

你可以[在Linux上使用'prctl()'來殺死子進程](http://stackoverflow.com/a/19448096/4279)。或者[創建新會話(/進程組)](http://stackoverflow.com/q/4789837/4279) – jfs

回答

0

Linux中的進程表(如在幾乎所有其他操作系統)的簡單計算機RAM中的數據結構。它保存有關當前由OS處理的進程的信息。

此信息包括關於每個過程

  • 進程id
  • 過程所有者
  • 過程優先
  • 對於每個過程
  • 父進程的環境變量
  • 指針中的一般信息一個進程的可執行機器代碼。

幸得可用的信息Marcus Gründler

非對您會有幫助。

但是你也許可以使用這個事實,當父進程id變成1(init)時,進程應該停止。

#!/usr/local/bin/python 

from time import sleep 
import os 
import sys 

#os.getppid() returns parent pid 
while (os.getppid() != 1): 
    sleep(1) 
    pass 

# now that pid is 1, we exit the program. 
sys.exit() 

這是否是解決您的問題?

+0

感謝您的回答,而我不寫實際的作業腳本,隊列系統的用戶這樣做,所以我無法控制用戶的腳本將如何表現 – skipper

相關問題