6

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

4

1 回答 1

5

替代方案:

nohup command &

使用巧妙的括号:

(( command & ) & )

如果你想删除标准输入/标准输出:

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

解释

TLDR:我们让一个子shell 启动一个子shell 来执行命令,从而启动一个孤儿进程。孤儿只有在 init 进程终止时才会死亡。

将子shell置于后台与将命令置于后台的区别在于子shell具有不同的进程状态

当您注销 SSH 会话或关闭任何shshell 会话SIGHUP时,会向该 shell 的所有子进程发送一个信号。我们在这里所做的是我们启动了一个子shell来启动一个子shell,从而不知道启动的进程。我们现在有一个孤儿进程

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

于 2020-03-24T03:27:44.847 回答