Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在ashshell中保持程序在后台运行_Linux_Shell_Ssh_Embedded Linux_Ash - Fatal编程技术网

Linux 如何在ashshell中保持程序在后台运行

Linux 如何在ashshell中保持程序在后台运行,linux,shell,ssh,embedded-linux,ash,Linux,Shell,Ssh,Embedded Linux,Ash,我需要SSH到一个嵌入式设备,启动一个后台程序,然后断开连接并保持后台进程运行。问题是嵌入式设备使用的是ash外壳(不是bash或其他任何东西),因此nohup和screen不可用。我一直无法找到任何方法来断开ash中的进程。在灰烬中有没有办法做到这一点 替代: nohup command & 使用巧妙的括号: (( command & ) & ) 如果要删除标准输入/标准输出: (( command 0<&- &>/dev/null &a

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

替代:

nohup command &
使用巧妙的括号:

(( command & ) & )
如果要删除标准输入/标准输出:

(( command 0<&- &>/dev/null &) &)
((命令0/dev/null&)&)
解释 TLDR:我们让子shell启动子shell以执行命令,从而启动孤立进程。孤儿仅在init进程死亡时死亡

两者的区别在于有不同的

当您注销SSH会话或关闭任何
sh
shell会话时,将向该shell的所有子进程发送
SIGHUP
信号。我们在这里做的是启动一个子shell来启动一个子shell,因此启动了流程。我们现在有一个


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

无论
nohup
还是
screen
都不是bash的一部分。你考虑过安装它们吗?偷一些C代码来创建一个守护进程,有很多,只需要30个sloc,把你的应用程序名作为命令行参数,然后完成。在嵌入式设备上安装新的“init.d”样式的应用程序,在SSH登录和注销时运行它。
tmux
也应该这样做。你能安装它吗?这能回答你的问题吗?bash特有的唯一方法是使用
disown
。所有其他的选择都和灰烬一样有效。哇,这真的很有效,谢谢!想解释一下吗?希望有帮助!