2017-03-08 164 views
0

我已經把一個程序寫入了一個服務,並且我有一個bash腳本運行來啓動實際的程序,因爲有些東西必須以特定的順序啓動。啓動腳本(從的init.d腳本調用start-stop-daemon的內容是這樣的:如何處理停止我的服務?

./rfid_reader & 
sleep 2 
java ReaderClass & 

這工作得很好,但我怎樣去殺死他們,當談到時間停止進程 我」?有沒有看過pidfiles,我只是得到這兩個程序的PID,將它們寫入一個文件,然後在關閉它們時關閉它們,還是必須要ps -ef | grep program才能獲得它們的PID?

+0

'pid1 = $(pidof program_name)&& pid2 = $(pidof other_name)&& kill $ pid1 $ pid2'?或者只是'kill $(pidof program_name)$(pidof other_name)' –

+0

這些工作,我認爲有一個標準的方法,我猜這是標準方式 –

+0

標準是調用相同的'/ etc/rc.d/initfile stop'你習慣了'/etc/rc.d/initfile start'這個守護進程(或'systemctl stop prog_name'來調用'systemd'世界中的停止服務) –

回答

2

我不認爲killall是一個很好的做法。您最好在某個文件(例如PID_FILE)中記錄在後臺啓動的程序的PID,然後kill $(<$PID_FILE)將其停止。

請參閱this thread瞭解如何獲取上一次啓動的背景程序PID

+0

我想這將是最好的解決方案,謝謝! –

+0

@BrydonGibson很高興能幫到:-) – shizhz

+0

除了''UUOC'(不必要使用'cat')可以用'kill $(<$ PID_FILE)' –

0

假設你知道你的程序的名稱,你可以殺死他們如下:

killall -KILL program_name 
+0

'-KILL'?真?這是你在森林中的正常習慣嗎? –

+0

爲了避免混淆,可能需要明確指出'program'是'program_name'。 –

+0

是的,program_name也可以,因爲Brydon最初聲明 ps -ef | grep程序 爲了一致性,我想重複一遍 – Frederic