我正在尝试编写一个Linux shell脚本(最好是命名为bash)detach.sh,以便安全地从终端分离程序,这样:
调用:./detach.sh prog [arg1 arg2 ...].
是exec-able,例如.通过在shell中运行它:
exec ./detach.sh prog [arg1 arg2 ...]
Run Code Online (Sandbox Code Playgroud)通过适当的引用(主要处理包含空格的参数).
丢弃输出(因为它们是不需要的).
不使用screen,tmux等等(与4相同的原因,加上不需要额外的保姆过程).
使用(合理地)可移植命令和程序,并且没有类似于start-stop-daemon特定于发行版的内容.
我想到了几种方法(#!/bin/bash为了简洁而忽略了shebang线):
nohup:
nohup "$@" >& /dev/null &
Run Code Online (Sandbox Code Playgroud)disown:
"$@" >& /dev/null &
disown
Run Code Online (Sandbox Code Playgroud)setsid:
setsid "$@" >& /dev/null &
Run Code Online (Sandbox Code Playgroud)使用子shell:
("$@" >& /dev/null &)
Run Code Online (Sandbox Code Playgroud)nohup/ setsid结合子壳:
# Or alternatively:
# (nohup "$@" >& /dev/null &)
(setsid "$@" >& /dev/null &)
Run Code Online (Sandbox Code Playgroud)当gedit用作测试程序(代替该 …