2014-10-31 45 views
0

所以,我需要運行一個程序,而不是跟蹤它的PID(至少在內存中),然後殺死那個程序。有任何想法嗎?我的直接想法是用後來可以找到的東西來標記這個過程,但這似乎是一個破產。我的下一個想法是在磁盤上存儲PID,但我不知道這種事情的慣例是什麼。有任何想法嗎?謝謝!在磁盤上標記unix進程/存儲pid?

+0

爲什麼NOT NOT在內存中存儲PID的附加約束?你可以嘗試按照http://stackoverflow.com/q/22867130/319204的方式來做些什麼你想達到什麼目的? – TheCodeArtist 2014-10-31 03:04:19

回答

1

正如你和chepner已經提到的,最直接的(也是常見的情況)是將它存儲在一個pid文件中。對於這一點:

如果它是一個系統範圍PROGRAMM:

/var/run/prog.pid 

如果它可能被多次運行的系統中安裝的程序:

/var/run/prog/prog_instance.pid 

如果它是一個用戶本地程序:

$HOME/.prog/prog.pid 

其他選項可能是使用pgrep找到它,只要你可以唯一地定義調用命令。例如,傳遞一個沒有使用的僞參數並將其用於檢索:

$ prog.sg --instance_1234 & 
$ pgrep -f -- '--instance_1234' 
3523 
2

您的程序可以在/var/run/下創建一個目錄來存儲這些文件。舉例來說,如果你的程序是myprog它可以存儲在

/var/run/myprog/PID 

在啓動的PID如果你的程序可以在同一時間運行多個實例,您可以使用PID自身的文件名,連同其啓動時間,以確保每個實例的唯一文件名。

/var/run/myprog/201410302306.1283.pid 

(請注意,如果您在文件名稱中使用PID,它給你,如果你真正的文件本身在寫PID;一個空文件就足夠了。)

0

可以使用start-stop-daemon啓動一個程序並在稍後殺死它。它有很多選項來查找程序,最有用的是--pid,用於存儲和檢索文件系統中的文件的pid,通常在/var/run(注意文件系統權限來寫入)。

請參閱手冊頁獲取更多提示。