如何在灰壳中保持程序在后台运行

时间:2015-04-17 16:11:36

标签: linux shell ssh embedded-linux ash

我需要SSH到嵌入式设备,启动后台程序,然后断开连接并保持后台进程运行。问题是嵌入式设备正在使用灰壳(不是bash或其他任何东西),因此nohup和screen不可用。我一直无法找到任何方法来断开灰烬中的过程。在灰中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

替代:

nohup command &

使用巧妙的括号:

(( command & ) & )

还有,如果您想删除stdin / stdout:

(( command 0<&- &>/dev/null &) &)

说明

TLDR :我们制作了一个子外壳,启动了一个子外壳来执行命令,从而启动了一个孤立进程。孤儿只有在初始化过程终止时才会死亡。

putting subshell in background vs putting command in background之间的区别在于subshells具有不同的process states

退出SSH会话或关闭任何sh Shell会话时,会向该Shell的所有子进程发送SIGHUP信号。我们在这里所做的是,我们启动了一个子外壳来启动一个子外壳,因此disowning开始了过程。现在,我们有了一个orphan process

此孤立进程不再具有与我们的SSH会话标识的PPID(父进程ID)。因此,当我们注销SSH会话并将SIGHUP发送到我们的所有子进程时,它永远不会碰到孤儿。