我有一個程序,我想開始。讓我們說這個程序會運行一段時間(真)-loop(所以它不會終止我想寫一個bash腳本其中:Bash:啓動並殺死子進程
- 啓動程序(
./endlessloop &
) - 等待1秒(
sleep 1
) - 害死程序 - ?!>如何
我不能使用$,因爲服務器運行大量實例的同時,從孩子得到PID
我有一個程序,我想開始。讓我們說這個程序會運行一段時間(真)-loop(所以它不會終止我想寫一個bash腳本其中:Bash:啓動並殺死子進程
./endlessloop &
)sleep 1
)我不能使用$,因爲服務器運行大量實例的同時,從孩子得到PID
您可以用p對於相同的grep命令:
kill $(pgrep endlessloop)
使用'pkill'並稱它爲一天! – heemayl
這會殺死每一個*無盡循環,而不僅僅是你開始的那個。它也會殺死'endlessloopctl'或'read-endlessloop-logs'。 –
我不能在這裏等一下? –
Store中的PID:
./endlessloop & endlessloop_pid=$!
sleep 1
kill "$endlessloop_pid"
您還可以檢查該進程是否仍與kill -0
運行:
if kill -0 "$endlessloop_pid"; then
echo "Endlessloop is still running"
fi
...和存儲變量中的內容意味着它可以擴展到多個進程:
endlessloop_pids=() # initialize an empty array to store PIDs
./endlessloop & endlessloop_pids+=("$!") # start one in background and store its PID
./endlessloop & endlessloop_pids+=("$!") # start another and store its PID also
kill "${endlessloop_pids[@]}" # kill both endlessloop instances started above
參見BashFAQ #68,「我如何運行一個命令,並將其N秒後中止(超時)?」
的ProcessManagement頁面上的Wooledge維基還討論了相關的最佳實踐。
但我不想殺死所有無盡循環過程,只是一個開始... –
@今天春天,這個答案就是這樣。 '$ endlessloop_pid'只存儲已啓動的PID或者'endlessloop_pids'數組情況下的PID。 –
關鍵是我無法區分哪一個是正確的要殺人。 –
你試過了什麼代碼?它是如何失敗的? – CAB
我嘗試了上面括號中的兩件事。問題是:如何殺死無盡環境? –