用途:不掛斷地運行命令。
語法:nohupCommand[Arg…][ &]
無論是否將nohup命令的輸出重定向到終端,輸出都將附加到當前目錄的nohup.out文件中?! ∪绻斍澳夸浀膎ohup.out文件不可寫,輸出重定向到$HOME/nohup.out文件中?! ∪绻麤]有文件能創建或打開以用于追加,那么Command參數指定的命令不可調用。
退出狀態:該命令返回下列出口值: 126可以查找但不能調用Command參數指定的命令?! ?27nohup命令發生錯誤或不能查找由Command參數指定的命令。 否則,nohup命令的退出狀態是Command參數指定命令的退出狀態。
用途:在后臺運行
一般兩個一起用
nohupcommand&
eg:
nohup./program/etc/chat.js>>/tmp/output.log2>&1&只輸出錯誤信息到日志文件:
nohup./program>/dev/null2>log&不輸出日志文件的***:
nohup./program>/dev/null2>&1&3.Linux的重定向0:表示標準輸入;1:標準輸出,在一般使用時,默認的是標準輸出;2:表示錯誤信息輸出;./program>/dev/null2>log表示將program的錯誤信息輸出到log文件,其他信息丟進/dev/null。
./program>/dev/null2>&1表示將program的錯誤輸出與標準輸出重定向到/dev/null,也就是屏蔽任何輸出。顯式寫法就是./program1>/dev/null2>&1.
執行順序是從左到右依次執行重定向的命令,下面來分析兩個案例
>/dev/null2>&1
標準輸出重定向到null,所以標準輸出無內容。錯誤輸出到標準輸出,由于前面標準輸出已經重定向到null,所以也無任何輸出。2>&1>/dev/null
錯誤輸出重定向到標準輸出,此時標準輸出是正常輸出的,所以會輸出錯誤內容.標準輸出重定向到null,此時標準輸出不輸出任何內容.二、查看運行的后臺進程(1)jobs-ljobs命令只看當前終端生效的,關閉終端后,在另一個終端jobs已經無法看到后臺跑得程序了,此時利用ps(進程查看命令)
[root@localhosttest]#jobs-l[1]-運行中nohup./program$1$2$3&(工作目錄:/home/test)[2]+運行中nohup./BaiduyunPCS$1$2$3&(2)ps-auxps-aux|grepchat.jsa:顯示所有程序u:以用戶為主的格式來顯示x:顯示所有程序,不以終端機來區分
注: 用ps-aux|grep查找進程很方便,最后一行總是會grep自己 用grep-v參數可以將grep命令排除掉
ps-aux|grepchat.js|grep-vgrep
再用awk提取一下進程ID ps-aux|grepchat.js|grep-vgrep|awk'{print$2}'
(3)如果某個進程起不來,可能是某個端口被占用查看使用某端口的進程lsof-i:8090netstat-ap|grep8090
(4)終止后臺運行的進程kill-9進程號
kill命令(1)通過jobs命令查看jobnum,然后執行kill%jobnum(2)通過ps命令查看進程號PID,然后執行kill%PID如果是前臺進程的話,直接執行Ctrl+c就可以終止了
將后臺中的命令調至前臺繼續運行如果后臺中有多個命令,可以先用jobs查看jobnum,然后用fg%jobnum將選中的命令調出。zsh需要在數字前面加%,bash則直接用數字.
(2)Ctrl+z命令將一個正在前臺執行的命令放到后臺,并且處于暫停狀態
(3)bg命令將一個在后臺暫停的命令,變成在后臺繼續執行如果后臺中有多個命令,可以先用jobs查看jobnum,然后用bg%jobnum將選中的命令調出繼續執行。zsh需要在數字前面加%,bash則直接用數字.
[root@localhosttest]#jobs[1]-運行中nohup./program$1$2$3&(工作目錄:/home/test)[2]+運行中nohup./BaiduyunPCS$1$2$3&//使用fg后,將任務2調至前臺運行.//fg%2[root@localhosttest]#fg2nohup./BaiduyunPCS$1$2$3^Z//使用ctrl+Z后,將任務2放置到后臺,并暫停[2]+已停止nohup./BaiduyunPCS$1$2$3//使用bg后,激活任務2的運行//bg%2[root@localhosttest]#bg2[2]+nohup./BaiduyunPCS$1$2$3&