nohup命令詳解

  

基礎命令學習目錄首頁javascript

 

原文連接:https://blog.csdn.net/hfismyangel/article/details/80258126html

1.nohupjava

用途:不掛斷地運行命令。node

語法:nohup Command [ Arg … ] [ & ]linux

  不管是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。服務器

  若是當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。post

  若是沒有文件能建立或打開以用於追加,那麼 Command 參數指定的命令不可調用。學習

退出狀態:該命令返回下列出口值:   
  126 能夠查找但不能調用 Command 參數指定的命令。   
  127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。   
  不然,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

2.&url

用途:在後臺運行spa

通常兩個一塊兒用

nohup command &

eg:

1
nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 &

進程號7585

查看運行的後臺進程

(1)jobs -l

jobs命令只看當前終端生效的,關閉終端後,在另外一個終端jobs已經沒法看到後臺跑得程序了,此時利用ps(進程查看命令)

(2)ps -ef 

1
ps -aux|grep chat.js
 a:顯示全部程序 
 u:以用戶爲主的格式來顯示 
 x:顯示全部程序,不以終端機來區分

注:

  用ps -def | grep查找進程很方便,最後一行老是會grep本身

  用grep -v參數能夠將grep命令排除掉

1
ps -aux|grep chat.js| grep -v grep

  再用awk提取一下進程ID 

1
ps -aux|grep chat.js| grep -v grep | awk  '{print $2}'

 

3.若是某個進程起不來,多是某個端口被佔用

查看使用某端口的進程

1
lsof -i:8090

1
netstat -ap|grep 8090

查看到進程id以後,使用netstat命令查看其佔用的端口

1
netstat -nap|grep 7779

使用kill殺掉進城後再啓動

4.終止後臺運行的進程

1
kill -9  進程號

 

 

今天在linux上部署wdt程序,在SSH客戶端執行./start-dishi.sh,啓動成功,在關閉SSH客戶端後,運行的程序也同時終止了,怎樣才能保證在推出SSH客戶端後程序能一直執行呢?經過網上查找資料,發現須要使用nohup命令。
完美解決方案:nohup ./start-dishi.sh >output 2>&1 &

現對上面的命令進行下解釋

用途:不掛斷地運行命令。
語法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略全部掛斷(SIGHUP)信號。在註銷後使用 nohup 命令運行後臺中的程序。要運行後臺中的 nohup 命令,添加 & ( 表示「and」的符號)到命令的尾部。

操做系統中有三個經常使用的流:
  0:標準輸入流 stdin
  1:標準輸出流 stdout
  2:標準錯誤流 stderr
  通常當咱們用 > console.txt,實際是 1>console.txt的省略用法;< console.txt ,實際是 0 < console.txt的省略用法。
 
 
下面步入正題:
>nohup ./start-dishi.sh >output 2>&1 &
解釋:
 1. 帶&的命令行,即便terminal(終端)關閉,或者電腦死機程序依然運行(前提是你把程序遞交到服務器上); 
 2. 2>&1的意思 
  這個意思是把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又導入文件output裏面,因此結果是標準錯誤和標準輸出都導入文件output裏面了。 至於爲何須要將標準錯誤重定向到標準輸出的緣由,那就歸結爲標準錯誤沒有緩衝區,而stdout有。這就會致使 >output 2>output 文件output被兩次打開,而stdout和stderr將會競爭覆蓋,這確定不是我門想要的. 
  這就是爲何有人會寫成: nohup ./command.sh >output 2>output出錯的緣由了 
==================================================================================
最後談一下/dev/null文件的做用,這是一個無底洞,任何東西均可以定向到這裏,可是卻沒法打開。 因此通常很大的stdou和stderr當你不關心的時候能夠利用stdout和stderr定向到這裏>./command.sh >/dev/null 2>&1 
It’s not too late to change.
原文連接:https://www.cnblogs.com/zq-inlook/p/3577003.html
相關文章
相關標籤/搜索