2017-07-20 108 views
0

我最常做的是暫停我的腳本,在後臺運行,然後否認它像如何運行shell腳本與終端關閉,在任何時間停止腳本

./script 
^Z 
bg 
disown 

然而,我希望能夠隨時取消我的腳本。如果我有一個無限期運行的腳本,我希望能夠在幾個小時或一天後或取消它時取消它。

+0

一種方法 - 將'PID'寫入'/ tmp'目錄中的文件中,或者寫入'/ usr/local/run'目錄。然後當你想停止進程時,你可以簡單地'殺死$(

+0

你能解釋一下這一點嗎?我如何將pid寫入文件? path/to/pidfile究竟是什麼?你有一個例子嗎? – Jacob

+0

'./script && echo $! >/path/to/pidfile'特殊變量'$!'保存最後一個進程啓動時的'PID'(*進程ID *)。所以你把'PID'保存到一個文件中,然後你可以通過發出'kill PID'來隨時終止進程。您也可以使用'pidfile'來驗證'script'的一個實例正在運行。在腳本終止時,您可以將'trap'添加到'script'以刪除'/ path/to/pidfile'。 (每個StackOverflow上有很多示例) –

回答

0

既然您遇到了一些麻煩,那麼讓我們來看看我們是否可以保持簡單。 (這假設你可以寫入/tmp,根據需要更改)。讓我們在後臺啓動腳本,並創建一個包含其進程PIDPID文件。

$ ./script & echo $! > /tmp/scriptPID 

可以檢查/tmp/scriptPID

$ cat /tmp/scriptPID 
###### 

內容在哪裏######是運行./script進程的PID號。您可以進一步確認pidof script(將返回相同的######)。您也可以使用ps aux | grep script查看該號碼。

當您準備好殺死./script進程時,只需將該號碼(例如######)傳遞至kill即可。您可以直接做到這一點:

$ kill $(</tmp/scriptPID) 

(或在我的評論中列出的其他方法)

您可以添加rm /tmp/scriptPID查殺過程後刪除pid文件。

看看,讓我知道你是否還有其他問題。