2013-02-13 46 views
0

我有重排根目錄本身給init程序,所以我不能使用下面的代碼:如果有一種方法跟蹤什麼是新的PID我該如何殺死一個正在重新初始化init的進程?

pid=Process.spawn("xxx") 
Process.wait(pid) #started xxx with pid, 
        #but it respawned itself to 
        #pid2 which has the ppid set to 1 

我不知道。

+0

其實殺滅與SIGINT進程組解決了這個問題。 – Istvan 2013-02-16 01:45:08

回答

1

這個問題有點畸形。但是你可以使用cgroups來做到這一點。爲您的活動創建一個新的cgroup安裝點。這將有一個包含系統中所有進程的「任務」文件。然後你可以創建這個目錄的子目錄,它將自動獲得他們自己的(空的)任務文件。只需將進程的PID寫入這個新的任務文件即可。它和它的所有孩子將永遠出現在該任務文件中,而不是系統其餘部分的文件。 「轉義」cgroup的唯一方法是擁有對任務文件的寫入權限。

是的,這聽起來很複雜,但事實並非如此。這可能是系統用來跟蹤進程樹的機制,可能出於同樣的原因:殺死進程中的所有子進程,而不管其父母發生了什麼。

顯然,一個簡單的回答你的問題可能是「用systemd」。