nohup——Ubuntu中nohup和&的區別
一、ctrl+c,ctrl+z等的區別
ctrl+c是強制中斷程式,ctrl+z是暫停程式。在shell中,ctrl-d表示退出當前shell. ctrl+z的是將任務中止(暫停的意思),但是此任務並沒有結束,他仍然在程序中他只是維持掛起的狀態,使用者可以使用fg/bg操作繼續前臺或後臺的任務,fg命令重新啟動前臺被中斷的任務,bg命令把被中斷的任務放在後臺執行。 (可以這樣理解:Ctrl+C相當於在window的工作管理員中結束任務;Ctrl+Z相當於介面上有兩個視窗,其中暗掉的那個,fg相當於點選那個暗掉的視窗,bg相當於最小化那個暗掉的視窗。)
二、nohup和&的區別以及使用
可以先在ubuntu系統上執行個小程式,比如:
#include <stdio.h>
#include <unistd.h>
int main ()
{
int x = 0;
while(1)
{
printf("hello %d, pid %u, ppid %d\n", x++, getpid(), getppid());
sleep(1);
}
return 0;
}
然後會生成可執行程式a.out,然後用這個可執行檔案在linux機器上進行測試! 1、&的意思-後臺執行 &的意思是在後臺執行,意思是說,當你在執行 ./a.out & 的時候, 即使你用ctrl C, 那麼a.out照樣執行(因為對SIGINT訊號免疫)。但是要注意, 如果你直接關掉shell後, 那麼, a.out程序同樣消失。 可見, &的後臺並不硬(因為對SIGHUP訊號不免疫)。 2、nohup的意思-永久執行
用nohup執行命令可以使命令永久的執行下去,和使用者終端沒有關係,例如我們斷開SSH連線都不會影響他的執行,注意了nohup沒有後臺執行的意思;&才是後臺執行。
&是指在後臺執行,但當用戶退出(掛起)的時候,命令自動也跟著退出。 3、結論 所以,&和nohup沒有任何關係, 要讓程序真正不受shell中Ctrl C和shell關閉的影響, 那該怎麼辦呢? 那就用:
nohup ./a.out &
如果你正在執行一個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)。 該命令的一般形式為:
nohup conmmand &
4、某個程式例子
nohup python PGM_proposal_generation.py 0 2500 &
0和2500是指輸入到PGM_proposal_generation.py檔案中的引數。