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 :不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里

posted @ 2020-11-15 16:03  拨云见日z  阅读(191)  评论(0编辑  收藏  举报