Linux

如何為多個後台程序設置標識符?

  • January 6, 2016

我正在創建一個自定義遊戲伺服器,並且我有一個 .jar 文件來執行它。我需要在單個虛擬機(如 15 個)上啟動多個遊戲伺服器。我發現,我可以像這樣執行它們:

java -jar server-1.0.jar &

但是當我輸入時,ps我只看到PID,CMD和. 我如何辨識哪個是伺服器 6,哪個是伺服器 9 等等?我應該使用什麼?TTY``TIME

使案例如-f開關來ps顯示更多資訊。見man ps

-f 進行全格式列表。此選項可以與許多其他 UNIX 樣式選項結合使用以添加其他列。它還會導致 列印命令參數。與 一起使用時-L,將添加 NLWP(執行緒數)和 LWP(執行緒 ID)列。請參閱c 選項、格式關鍵字 args 和格式關鍵字 comm。

您可以pid在啟動後台作業後立即記下它:

command & pid1=$!
command & pid2=$!

$!是最後啟動的後台作業的 pid。

不建議使用通過腳本或程序中的程序屬性搜尋 pid 的工具。

程序應始終跟踪其子程序。如果你走ps/ pgrep… 路線,你可能會殺死(=信號)無辜的受害者(=不是你自己但意外匹配你的查詢的程序)。


如果您瞄準正確的 pid,您也會冒這種風險,但這些 pid 不是您的孩子。一個pid槽被保留,直到程序死亡並且它的父程序wait在它上面(只有父程序可以wait在程序上)。如果 apid不是你的,它可能已經死亡,並且在你學習apid和你發出信號之間等待。然後你可以瞄準一個無辜的受害者(競爭條件)。

引用自:https://unix.stackexchange.com/questions/253612