在服务器上的ssh会话中,我使用&
在后台启动了一些bash进程(启动其他进程),并将stdin / stdout重定向到文件(<dev/null >mylog.out
)。
jobs
下的流程未列出,ps -T
仅显示一个bash
流程和ps
本身。
大多数(子)进程由用户root
运行,但都链接到特定的TTY pts/20
。
如果我关闭ssh会话,是否会向进程及其子进程发送HUP信号,还是会继续运行?如果是的话,我怎么能完全脱离它们?
答案 0 :(得分:1)
如果您在后台放置进程,该进程将忽略SIGHUP命令。所以这个过程将继续运行。
测试结果:
在后台登录并运行bash
脚本o.sh
并退出:
system:10.11.2.122 > o.sh &
system:10.11.2.122 > exit
登录系统并检查o.sh
进程:
system:10.11.2.122 > ps -ef | grep o.sh
root 19115 1 0 10:10 ? 00:00:00 /usr/local/bin/bash /root/scripts/o.sh
root 27774 20197 0 10:23 pts/2 00:00:00 grep o.sh
此方法守护正在运行的进程。
使用bash
时,此行为取决于huponexit
shell选项。可以使用CentOS / RedHat 6.7上的shopt
命令查看这些和其他选项设置。
huponexit
似乎在CentOS / RedHat 6.7上关闭。
shopt
的输出的一个子集:
histappend off
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell on
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
所以回答你的问题:
如果我关闭ssh会话,是否会向进程及其子进程发送HUP信号,还是会继续运行?
这取决于您的huponexit
设置。如果huponexit
为off
,则否并且流程将继续运行。否则,是。
如果是,我怎么能完全脱离它们?
执行过程时使用nohup
命令。
nohup your_process &