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