2016-09-22 200 views
3

我有一個程序,我想開始。讓我們說這個程序會運行一段時間(真)-loop(所以它不會終止我想寫一個bash腳本其中:Bash:啓動並殺死子進程

  1. 啓動程序(./endlessloop &
  2. 等待1秒(sleep 1
  3. 害死程序 - ?!>如何

我不能使用$,因爲服務器運行大量實例的同時,從孩子得到PID

+1

你試過了什麼代碼?它是如何失敗的? – CAB

+1

我嘗試了上面括號中的兩件事。問題是:如何殺死無盡環境? –

回答

0

您可以用p對於相同的grep命令:

kill $(pgrep endlessloop) 
+0

使用'pkill'並稱它爲一天! – heemayl

+2

這會殺死每一個*無盡循環,而不僅僅是你開始的那個。它也會殺死'endlessloopctl'或'read-endlessloop-logs'。 –

+0

我不能在這裏等一下? –

2

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維基還討論了相關的最佳實踐。

+0

但我不想殺死所有無盡循環過程,只是一個開始... –

+0

@今天春天,這個答案就是這樣。 '$ endlessloop_pid'只存儲已啓動的PID或者'endlessloop_pids'數組情況下的PID。 –

+0

關鍵是我無法區分哪一個是正確的要殺人。 –