1. 程式人生 > >nohup——Ubuntu中nohup和&的區別

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的意思是忽略SIGHUP訊號,所以當執行nohup ./a.out的時候,關閉shell, 那麼a.out程序還是存在的(對SIGHUP訊號免疫)。但是,如果你直接在shell中用Ctrl C, 那麼, a.out程序也是會消失的(因為對SIGINT訊號不免疫)

用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檔案中的引數。