我需要通过 SSH 连接到嵌入式设备,启动后台程序,然后断开连接并保持后台进程运行。问题是嵌入式设备正在使用 ash shell(不是 bash 或其他任何东西),因此 nohup 和 screen 不可用。我还没有找到任何方法来断开灰烬中的进程。有什么方法可以在灰烬中做到这一点吗?
替代方案:
nohup command &
使用巧妙的括号:
(( command & ) & )
另外,如果你想删除标准输入/标准输出:
(( command 0<&- &>/dev/null &) &)
解释
TLDR:我们让一个子shell启动一个子shell来执行命令,从而启动一个孤立进程。只有当 init 进程终止时,孤儿进程才会死亡。
和...之间的不同将 subshell 置于后台与将命令置于后台就是它子壳有不同的进程状态
当您注销 SSH 会话或关闭任何sh
外壳会话aSIGHUP
信号被发送到该 shell 的所有子进程。我们在这里所做的是我们启动了一个子shell来启动一个子shell,因此否认已启动的进程。我们现在有一个孤儿进程.
该孤立进程不再具有可识别我们的 SSH 会话的 PPID(父进程 ID)。因此,当我们注销 SSH 会话并SIGHUP
被发送到我们所有的子进程,它永远不会到达孤儿进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)