當用戶註銷(logout)或者網路斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 信號,要麼讓進程運行在新的會話里從而成為不屬於此終端的子進程。 (hangup 名稱的來由:在 Unix 的早期版本中,每個終端都會通過 m ...
當用戶註銷(logout)或者網路斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 信號,要麼讓進程運行在新的會話里從而成為不屬於此終端的子進程。
(hangup 名稱的來由:在 Unix 的早期版本中,每個終端都會通過 modem 和系統通訊。當用戶 logout 時,modem 就會掛斷(hang up)電話。 同理,當 modem 斷開連接時,就會給終端發送 hangup 信號來通知其關閉所有子進程)
1.nohup:讓提交的命令忽略 hangup 信號
nohup 的幫助信息:
$ nohup --help
Usage: nohup COMMAND [ARG]... or: nohup OPTION
Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and exit If standard input is a terminal, redirect it from an unreadable file. If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise. If standard error is a terminal, redirect it to standard output. To save output to FILE, use 'nohup COMMAND > FILE'.
使用:在要處理的命令前加上 nohup 即可,標準輸出和標準錯誤預設會被重定向到 nohup.out 文件中。一般我們可在結尾加上"&"來將命令同時放入後臺運行,也可用"> filename"來更改預設的重定向文件路徑。
nohup ping www.baidu.com & nohup python train_model.py > console.log &
2.setsid:在新session執行命令(使進程不屬於接受 HUP 信號的終端的子進程,那麼就不會受到 HUP 信號的影響)
setsid的幫助信息:
$ setsid --help Usage: setsid [options] <program> [arguments ...] Run a program in a new session. Options: -c, --ctty set the controlling terminal to the current one -w, --wait wait program to exit, and use the same return -h, --help display this help and exit -V, --version output version information and exit
使用:
setsid ping www.ibm.com &
另外,查看進程並停止:
$ ps -ef | grep ping abby 3899 1632 0 14:39 ? 00:00:00 ping www.baidu.com abby 4038 3907 0 14:43 pts/20 00:00:00 grep --color=auto ping $ kill -9 3899
參考: