Bash
殺死由 bash 腳本啟動的中間人伺服器?
我有一個看起來像這樣的 bash 腳本:
bundle exec middleman server & node script.js && kill -9 $(lsof -i:4567 -t) && bundle exec middleman build --verbose
現在,我殺死 bundle exec 中間人伺服器的方法是基於埠(localhost:4567)殺死。但是,如果埠需要更改(它會更改),這並不好。
在執行節點 script.js 之後殺死 bundle exec 中間人伺服器的最佳方法是什麼(它基本上等待伺服器線上,發送一個 get 請求並對返回的伺服器數據做一些事情)。我想做一些不依賴於埠的事情,只是按名稱或第二次最近執行的事情(或最近的伺服器執行?)
非常感謝你!
根據外殼,您應該能夠輕鬆殺死後台任務。如果您沒有在後台執行其他任何東西,它將是工作 1,因此您可以
kill %1
:sauer@host:~$ set -b sauer@host:~$ sleep 10 & echo hello [1] 18988 hello sauer@host:~$ kill %1 [1]+ Terminated sleep 10
如果您可能在後台有其他事情,您可以做幾件事。假設 Bash 或類似工作的 shell,您可以使用
jobs -r
來獲取正在執行的作業列表並 grep 作業編號,或者您可以在作業規範中指定程序名稱(百分比後面的東西)而不是數字。大概kill %bundle
。或者,即使在這種情況下最有用,您也可以使用%+
來指代最近的後台作業。sauer@host:~$ set -b sauer@host:~$ sleep 10 & sleep 11 & echo hello [1] 19406 [2] 19407 hello sauer@host:~$ kill %+ [2]+ Terminated sleep 11
請注意,後台執行了兩個睡眠程序,但這
%+
是“最近的”一個,所以它被殺死了。也set -b
只是啟用對後台作業狀態的即時回饋,而不是等到下一個提示。這只是範例。:)哦,這裡還有一個有用的範例,展示了按名稱殺死後台任務以及如果模式匹配多個程序會發生什麼,因為它是主題。請注意,“jobs”輸出顯示最近和第二最近的工作的
+
和指示符,可用作工作規範中的速記。-
sauer@host:~$ sleep 10 & sleep 11 & sleep 9 & echo hello [1] 22255 [2] 22256 [3] 22257 hello sauer@host:~$ jobs [1] Running sleep 10 & [2]- Running sleep 11 & [3]+ Running sleep 9 & sauer@host:~$ kill %sleep -bash: kill: sleep: ambiguous job spec sauer@host:~$ kill %"sleep 10" [1] Terminated sleep 10