0
我最常做的是暫停我的腳本,在後臺運行,然後否認它像如何運行shell腳本與終端關閉,在任何時間停止腳本
./script
^Z
bg
disown
然而,我希望能夠隨時取消我的腳本。如果我有一個無限期運行的腳本,我希望能夠在幾個小時或一天後或取消它時取消它。
我最常做的是暫停我的腳本,在後臺運行,然後否認它像如何運行shell腳本與終端關閉,在任何時間停止腳本
./script
^Z
bg
disown
然而,我希望能夠隨時取消我的腳本。如果我有一個無限期運行的腳本,我希望能夠在幾個小時或一天後或取消它時取消它。
既然您遇到了一些麻煩,那麼讓我們來看看我們是否可以保持簡單。 (這假設你可以寫入/tmp
,根據需要更改)。讓我們在後臺啓動腳本,並創建一個包含其進程PID
的PID
文件。
$ ./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文件。
看看,讓我知道你是否還有其他問題。
一種方法 - 將'PID'寫入'/ tmp'目錄中的文件中,或者寫入'/ usr/local/run'目錄。然後當你想停止進程時,你可以簡單地'殺死$( path/to/pidfile)'。 –
你能解釋一下這一點嗎?我如何將pid寫入文件? path/to/pidfile究竟是什麼?你有一個例子嗎? – Jacob
'./script && echo $! >/path/to/pidfile'特殊變量'$!'保存最後一個進程啓動時的'PID'(*進程ID *)。所以你把'PID'保存到一個文件中,然後你可以通過發出'kill PID'來隨時終止進程。您也可以使用'pidfile'來驗證'script'的一個實例正在運行。在腳本終止時,您可以將'trap'添加到'script'以刪除'/ path/to/pidfile'。 (每個StackOverflow上有很多示例) –