我需要SSH到嵌入式设备,启动后台程序,然后断开连接并保持后台进程运行。问题是嵌入式设备正在使用灰壳(不是bash或其他任何东西),因此nohup和screen不可用。我一直无法找到任何方法来断开灰烬中的过程。在灰中有没有办法做到这一点?
答案 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
发送到我们的所有子进程时,它永远不会碰到孤儿。