Make
Makefile:如果它正在執行,則殺死一個程序
我有一個像這樣的makefile,如果它已經在執行,它會殺死一個程序,
test: client server pgrep myserver && killall myserver /build/bin/myserver --background /build/bin/myclient --server 127.0.0.1
如果我
myserver
以前開始過,它會起作用。如果不是,pgrep myserver
則以非零狀態失敗,並且 Makefile 將其視為錯誤,例如pgrep myserver && killall myserver make: *** [test] Error 1
有什麼建議麼?
不要
killall
與pgrep
. 他們不使用相同的匹配規則,所以pgrep
顯示的可能不是killall
殺死的。使用pkill
,這與它完全相同,pgrep
只是它殺死匹配的程序而不是顯示它們的 PID。請注意,如果您同時呼叫pgrep
andpkill
,則會出現競爭條件:到時間pkill
執行時,顯示的某些程序pgrep
可能已終止,而某些新程序可能已啟動。除非您關心程序 ID,否則呼叫pgrep
;是沒有意義的。你可以直接打電話pkill
。
pkill
如果它沒有找到任何要殺死的程序,則返回狀態 1。要麼-
在命令的開頭添加,告訴 make 忽略這個錯誤,要麼將命令更改為與pkill myserver || true
執行完全相同pkill myserver
但始終返回成功狀態的命令。test: client server pkill myserver || true /build/bin/myserver --background /build/bin/myclient --server 127.0.0.1