关于Linux中后台运行程序(&)退出时收不到SIGHUP信号的说明

你可能在很多地方看到过类似这样的话:

“但是我们很多程序并不像mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用&结尾,但是如果终端关闭,那么程序也会被关闭。但是为了能够后台运行,那么我们就可以使用nohup这个命令”

很多博客和文章都是上面那样的陈述,包括鸟哥的Linux私房菜也在第17章脱机管理问题中如是说。事实真的是这样么?从我开始使用linux系统一直到目前为止,我每次在本地终端或者ssh到远程服务器上之后,直接 xxxx &,在后台启动一个程序后,里面使用exit命令退出(或者按ctrl+D快捷键退出),过一段时间再次打开终端或者ssh到远程服务器上之后,用ps查看进程状态,发现之前后台运行的程序依然稳定的在系统中支持运行。不相信的读者可以自行测试。为什么实际情况和上面的论断相悖?实际上,上面陈述是对的,但是现实是复杂的,就像Linux有很多发行版一样,linux的终端或者伪终端也是由各个厂商或者组织实现的。在终端中有个内置的命令叫做: shopt,该命令定义了很多终端的默认行为。待续.....

posted @ 2020-06-01 21:52  impluse  阅读(441)  评论(1编辑  收藏  举报