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

标签 linux shell ssh embedded-linux ash

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

最佳答案

替代方案:

nohup command &

使用巧妙的括号:
(( command & ) & )

而且如果你想删除标准输入/标准输出:
(( command 0<&- &>/dev/null &) &)

解释

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

putting subshell in background vs putting command in background的区别是subshells有不同 process states

当您注销 SSH session 或关闭任何 sh 时shell session SIGHUP信号被发送到该 shell 的所有子进程。我们在这里所做的是我们启动了一个子shell来启动一个子shell,因此disowning开始的过程。我们现在有一个 orphan process .

这个孤立的进程不再有一个 PPID(父进程 ID)来标识我们的 SSH session 。所以当我们注销 SSH session 和一个 SIGHUP被发送到我们所有的子进程,它永远不会命中孤儿。

关于linux - 如何在 ash shell 中保持程序在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704358/

相关文章:

Linux搜索单词并显示整行

linux - 使用 grep 查找一行并仅打印该行的 2 个单词

python -/usr/bin/python 与/usr/local/bin/python

bash - 为什么命令选项 "-f"被 bash 当作命令

git - 在动态 DNS 后面使用 git

linux - Perl 信号处理会截断与数据库的连接并导致错误

linux - 在 bashrc 中使用 linux "tee"命令

php - 如何记录使用 ssh 完成的事件

java - 从java从windows ssh服务器获取文件

linux - 如果 tar 被中断,它会覆盖它操作的第一个文件。有什么办法可以防止这种情况发生吗?