=============================================================================================
nohup command > myout.file 2>&1 &
命令解析:
使用nohup命令后台運行命令之后,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在后台運行。
command>out.file是將command的輸出重定向到out.file文件,即輸出內容不打印到屏幕上,而是輸出到out.file文件中。
2>&1 是將標准出錯重定向到標准輸出,這里的標准輸出已經重定向到了out.file文件,即將標准出錯也輸出到out.file文件中。
最后一個&, 是讓該命令在后台執行。
ctrl + z
可以將一個正在前台執行的命令放到后台,並且處於暫停狀態。
Ctrl+c
終止前台命令。
jobs
查看當前有多少在后台運行的命令。
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
注意:當前用戶退出后再次登錄,無法通過jobs查詢后台任務,需要使用PS才可以找到。被坑了,MARK下。
tail -100f out.file
可以監控日志文件
=============================================================================================
難免會遇到在Linux,后台執行任務。下面,總結了一下關閉窗口任然在后台執行的方法,例如
#執行一個打包命令
tar czf /data/backup.tgz /data/backup
1. 采用&
tar czf /data/backup.tgz /data/backup & ctrl+d #退出 才可以,如果直接關閉窗口,進程任然會被關閉
2. 采用nohup
nohup tar czf /data/backup.tgz /data/backup ctrl+z #掛起到后台 bg #后台執行 可以先通過jobs 查看當前有多少job ctrl+d #或者 關閉窗口 進程任然會在后台執行
3.采用nohup + &
nohup tar czf /data/backup.tgz /data/backup & ctrl+d 或者 關閉窗口 進程任然會在后台執行
4.采用(command &)
(tar czf /data/backup.tgz /data/backup &) #會將ppid設置為1,而非當前會話的id,並且jobs查看不到當前的作業。注意這里的括號即是這個方法的重點。 ctrl+d #或者 關閉窗口 進程任然會在后台執行
5.采用setid run a program in a new session
setid tar czf /data/backup.tgz /data/backup #會將ppid設置為1,而非當前會話的id ctrl+d #或者 關閉窗口 進程任然會在后台執行
6.采用disown
tar czf /data/backup.tgz /data/backup
ctrl+z
jobs
bg %N disown -h %N #N即為job的id disown 可以配合 &使用,效果更好,因為 CTRL-z 的用途就是將當前進程掛起(Suspend),然后我們就可以用jobs命令來查詢它的作業號,再用bg jobspec來將它放入后台並繼續運行。需要注意的是,如果掛起會影響當前進程的運行結果,請慎用此方法。 disown -rh -a xxx #-a所有 -r所有 -h忽略hup
7.采用screen
screen
tar czf /data/backup.tgz /data/backup ctrl+a d #不可以直接ctrl+d 這樣會ternimate screen
用screen -dmS session name來建立一個處於斷開模式下的會話(並指定其會話名)。
用screen -list 來列出所有會話。
用screen -r session name來重新連接指定會話。 screen -x session_name(id) 連接attached會話
用快捷鍵CTRL-a d 來暫時斷開當前會話。
