nohup:运行不受挂起影响的命令。
SIGHUP 信号:在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 系统对SIGHUP信号的默认处理是终止收到该信号的进程。
先抛结论。
使用&后台运行程序:
①结果会输出终端;
②使用Ctrl+C发送SIGINT信号,程序免疫;
③关闭session发送SIGHUP,程序关闭;
使用nohup运行程序:
①结果默认输出到nohup.out; #可能会一批批的刷进去,不那么实时
②使用Ctrl+C发送SIGINT信号,程序关闭;
③关闭session发送SIGHUP,程序免疫;
日常使用:
线上尽量nohup和&配合启动程序,如 nohup ./test &;
—— 同时免疫SIGINT和SIGHUP信号。
0、首先编写如下测试代码
#include "stdio.h"
int main()
{
int i =0;
while(1){
printf("hello world! %d\n",i++);
sleep(1);
}
}
循环输出hello world!+循环轮次数,每次循环周期为1秒。
gcc test.c -o test
1、首先直接运行./test程序
效果如下:
①Ctrl+C组合键,收到SIGINT信号;程序默认行为是终止。
2、./test &运行程序
效果如下:
①首先会在终端显示进程号,这个就是启动进程的进程号。
②Ctrl+C发出SIGINT信号,程序会继续运行。
③退出session(关闭整个shell终端)后收到SIGHUP信号程序退出。
3、使用nohup ./test运行程序
效果如下:
①前台没有出现进程号
②有一个“ignoring input and appending output to 'nohup.out'”的提示
③hello world!也没有出现在前台
④关闭session程序收到SIGHUP信号不会关闭
⑤Ctrl+C程序收到SIGINT信号会关闭
4、nohup与&联合使用
①SIGINT进程不会关闭
②SIGHUP进程不会关闭。