詳解Linux的nohup和&用法和區別 insmoin

Linux的nohup和&用法和區別

在應用Unix/Linux時,我們一般想讓某個程序在後臺運行,於是我們將常會用 & 在程序結尾來讓程序自動運行。

比如我們要運行mysql在後臺: /usr/local/mysql/bin/mysqld_safe –user=mysql &

可是有很多程序並不像mysqld一樣,這樣我們就需要nohup命令,怎樣使用nohup命令呢?這裏講解nohup命令的一些用法。

nohup ./start.sh &

&的意思是在後臺運行, 什麼意思呢? 意思是說, 當你在執行 ./start.sh & 的時候, 即使你用ctrl C, 那麼start.sh照樣運行(因爲對SIGINT信號免疫)。 但是要注意, 如果你直接關掉shell後, 那麼,start.sh進程同樣消失。 可見, &的後臺並不硬(因爲對SIGHUP信號不免疫)。

nohup的意思是忽略SIGHUP信號, 所以當運行nohup ./start.sh的時候, 關閉shell, 那麼start.sh進程還是存在的(對SIGHUP信號免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那麼start.sh進程也是會消失的(因爲對SIGINT信號不免疫)

 

所以, &和nohup沒有半毛錢的關係, 要讓進程真正不受shell中Ctrl C和shell關閉的影響, 那該怎麼辦呢? 那就用nohup ./start.sh &吧, 兩全其美。

 

如果你懂守護進程, 那麼nohup ./start.sh &有點讓start.sh成爲守護進程的感覺。

 

 

nohup

不掛斷地運行命令。no hangup的縮寫,意即“不掛斷”。一般理解&記住一個命令最簡單的方法是記住它是什麼縮寫,就自然理解了這個命令。 nohup運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號;

語法

nohup Command [ Arg ... ] [ & ]

nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。在註銷後使用 nohup 命令運行後臺中的程序。要運行後臺中的 nohup 命令,添加 & ( 表示“and”的符號)到命令的尾部。 如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

 

nohup和&的區別

&是指在後臺運行

運行 nohup --help Run COMMAND, ignoring hangup signals. 可以看到是“運行命令,忽略掛起信號”就是不掛斷的運行,注意沒有後臺運行功能。

就是指,用nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關係,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有後臺運行的意思;&纔是後臺運行

&是指在後臺運行,但當用戶推出(掛起)的時候,命令自動也跟着退出

那麼,我們可以巧妙的吧他們結合起來用就是

nohup COMMAND &

這樣就能使命令永久的在後臺執行 例如:

sh test.sh & 將sh test.sh任務放到後臺 ,即使關閉xshell退出當前session依然繼續運行,但標準輸出和標準錯誤信息會丟失

nohup sh test.sh 將sh test.sh任務放到後臺,關閉標準輸入,前臺不再能夠接收任何輸入(標準輸入),重定向標準輸出和標準錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

nohup sh test.sh & 將sh test.sh任務放到後臺,但是依然可以使用標準輸入,前臺能夠接收任何輸入,重定向標準輸出和標準錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章