一、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文件中的参数。