有沒有辦法讓我(一個普通的非 root 使用者)可以控制一個連續運行的後台進程?
我需要做的就是啟動、停止和重新啟動這個過程。透過 PID 進行監控並發送 SIGHUP 或 SIGINT 終止即可。我可以使用複雜的 bash 腳本,它不必是系統範圍內的腳本。只為我。
我也真的需要它在我從 ssh 註銷時不停止。
有沒有辦法在 RHEL 6.4 中做到這一點?
答案1
螢幕或 tmux
當然,您可以啟動進程,然後透過使用終端多工器(例如 screen 或 tmux)連續運行。進程可以繼續保留在 screen 或 tmux 會話中,並且您可以根據需要連接/斷開到(screen 或 tmux)。
背景
您可以運行您喜歡的任何進程,然後將其置於後台,然後使用命令將其與當前終端斷開連接disown
。
$ disown -a
此外,如果您只想啟動一個進程而不必將其置於後台,則disown
可以使用該命令nohup
。
$ nohup myexec &
當退出shell時,myexec
會繼續運作。
例子
啟動一個假進程。
$ sleep 12345 &
[1] 24339
$
確保我們可以看到它:
$ pgrep -f "sleep 12345"
24339
但它仍然連接到我們的終端:
$ jobs
[1]+ Running sleep 12345 &
那我們就disown
這樣吧:
$ disown -a
$ jobs
$
看到它仍在運行:
$ pgrep -f "sleep 12345"
24339
現在讓我們登出並重新登入。
$ pgrep -f "sleep 12345"
24339
您可以隨時使用標準方法終止此程序:
$ pkill -HUP -f "sleep 12345"
$ pgrep -f "sleep 12345"
$
上面的程式碼會將訊號傳送HUP
到與模式「sleep 12345」相符的進程名稱。仔細檢查後發現它現在已經消失了。