Nohup 与 & 的区别
SIGHUP 与 SIGINT
1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一 Session 内的各个作业, 这时它们与控制终端不再关联
登录 Linux 时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出Linux 登录时,前台进程组和后台有对终端输出的进程将会收到 SIGHUP 信号; 这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如 wget 能捕获 SIGHUP 信号,并忽略它,这样就算退出了 Linux 登录,wget 也能继续下载 。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
2) SIGINT
程序终止(Interrupt)信号, 在用户键入 INTR 字符(通常是 Ctrl-C)时发出,用于通知前台进程组终止进程 。
&(免疫 SIGHUP)
使用 & 后台运行程序:
①. — 结果会输出到终端
②. — 使用 Ctrl + C 发送 SIGINT 信号,程序免疫
③. — 关闭 Session 发送 SIGHUP 信号,程序关闭
Nohup(免疫 SIGINT)
使用 Nohup 运行程序:
①. — 结果默认会输出到 nohup.out
②. — 使用 Ctrl + C 发送 SIGINT 信号,程序关闭
③. — 关闭 Session 发送 SIGHUP 信号,程序免疫
最佳实践
平日线上经常使用 Nohup 和 & 配合来启动程序:
同时免疫 SIGINT 和 SIGHUP 信号
PS :不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里
记录成长过程