shell - 通过在后台运行并重定向STDIN / OUT来分离进程?

时间:2016-07-14 12:25:48

标签: bash shell ssh root detach

在服务器上的ssh会话中,我使用&在后​​台启动了一些bash进程(启动其他进程),并将stdin / stdout重定向到文件(<dev/null >mylog.out)。

jobs下的流程未列出,ps -T仅显示一个bash流程和ps本身。

大多数(子)进程由用户root运行,但都链接到特定的TTY pts/20

如果我关闭ssh会话,是否会向进程及其子进程发送HUP信号,还是会继续运行?如果是的话,我怎么能完全脱离它们?

1 个答案:

答案 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设置。如果huponexitoff,则并且流程将继续运行。否则,

如果是,我怎么能完全脱离它们?

执行过程时使用nohup命令。

nohup your_process &