如何在 ash shell 中保持程序在后台运行

Mar*_*arc 6 linux ssh shell embedded-linux ash

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

Len*_*nna 5

替代方案:

nohup command &
Run Code Online (Sandbox Code Playgroud)

使用巧妙的括号:

(( command & ) & )
Run Code Online (Sandbox Code Playgroud)

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

(( command 0<&- &>/dev/null &) &)
Run Code Online (Sandbox Code Playgroud)

解释

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

之间的差值将在子外壳背景VS把命令在背景亚壳层具有不同的过程状态

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

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