linux – 如果我启动后台进程然后注销,它会继续运行吗?

在与同事长时间讨论之后问这个问题,我真的想在这里澄清一下.

我通过添加“&”来启动后台进程到命令行或用CTRL-Z停止它并在后台用“bg”恢复它.然后我退出了.

怎么了?

我们很确定它应该被一个SIGHUP杀死,但这并没有发生;再次登录时,进程很愉快,并且pstree显示它被init“采用”了.

这是预期的行为吗?

但是,如果是的话,nohup命令的目的是什么?看起来这个过程无论如何都不会被杀死,无论是否有……

编辑1

更多细节:

>该命令是从SSH会话启动的,而不是从物理控制台启动的.
>该命令是在没有nohup和/或&amp ;;的情况下启动的然后用CTRL-Z暂停并用bg在背景中恢复.
> ssh会话没有下降.有一个实际的注销(“退出”命令).
>该过程是一个scp文件复制操作.
>再次登录时,pstree显示进程正在运行并且是init的子进程.

编辑2

更明确地陈述问题:将后台进程(使用&或bg)使其忽略SIGHUP,就像nohup命令一样?

编辑3

我尝试手动发送一个SIGHUP到scp:它退出了,所以它肯定不会忽略该信号.

然后我再次尝试启动它,将它放在后台并注销:它被init“采用”并继续运行,我在重新登录时找到了它.

我现在很困惑.看起来没有一个SIGHUP被发送到所有upong注销.

解决方法

找到答案.

对于BASH,这取决于huponexit shell选项,可以使用内置shopt命令查看和/或设置该选项.

默认情况下,此选项看起来是关闭的,至少在基于RedHat的系统上是这样.

有关BASH man page的更多信息:

The shell exits by default upon receipt of a SIGHUP. Before exiting,an interactive shell resends the SIGHUP to all jobs,running or stopped. Stopped jobs are sent SIGCONT to ensure that they receive the SIGHUP. To prevent the shell from sending the signal to a particular job,it should be removed from the jobs table with the disown builtin (see SHELL BUILTIN COMMANDS below) or marked to not receive SIGHUP using disown -h.

If the huponexit shell option has been set with shopt,bash sends a SIGHUP to all jobs when an interactive login shell exits.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format='{{.LogPath}}' <container_name> 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户