1.nohup
用途:不掛斷地運行命令。如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那么可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。
語法:nohup Command [ Arg … ] [ & ]
- 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。
- 如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。
- 如果沒有文件能創建或打開以用於追加,那么 Command 參數指定的命令不可調用。
退出狀態:該命令返回狀態如下
- 126 可以查找但不能調用 Command 參數指定的命令。
- 127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
- 除此之外,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
2.&
用途:在后台運行,但當用戶退出(掛起)的時候,命令自動也跟着退出
3.nohup與&一起使用
nohup與&合在一起會讓命令永久的在后台執行
語法:nohup COMMAND &
eg: nohup command > myout.file 2>&1 &
其中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ,在該例中 2>&1是將標准錯誤重定向到標准輸出,標准輸出再被重定向輸入到myout.file文件中。
4.測試
測試文件 mylog.sh
1 #!/bin/bash 2 3 index=0 4 while [ 1 ] 5 do 6 echo mylog $index 7 index=$[ index+1 ] 8 sleep 1s 9 done
測試四種情況:
執行命令 | 狀態 |
./mylog.sh | 結果會輸出到終端 使用Ctrl + C發送SIGINT信號或關閉session發送SIGHUP信號,程序關閉 |
./mylog.sh & | 結果會輸出到終端 使用Ctrl + C發送SIGINT信號,程序免疫 關閉session發送SIGHUP信號,程序關閉 |
nohup ./mylog.sh | 結果默認會輸出到nohup.out 使用Ctrl + C發送SIGINT信號,程序關閉 關閉session發送SIGHUP信號,程序免疫 |
nohup ./mylog.sh & | 同時免疫SIGINT和SIGHUP信號 |
測試過程
1.使用./mylog.sh
2.使用./mylog.sh &
使用ctrl+c發送SIGINT信號,程序免疫
關閉終端窗口,查看程序,程序關閉
3.使用nohup ./mylog.sh
使用ctrl+c,程序關閉,輸出信息被保存到當前目錄nohup.out文件中
關閉終端窗口,查看程序,程序免疫
4.使用nohup ./mylog.sh &
使用ctrl+c,程序免疫
關閉終端窗口,程序免疫
只有通過kill殺掉進程
總結
常用任務管理命令
# jobs //查看任務,返回任務編號n和進程號
# bg %n //將編號為n的任務轉后台運行
# fg %n //將編號為n的任務轉前台運行
# ctrl+z //掛起當前任務
# ctrl+c //結束當前任務