答案 0 :(得分:3)
&
告诉外壳程序将其前面的命令放入后台。 -D
只是传递给my_first_process
并由它解释的标志;它与外壳完全无关。
您将必须查看my_first_process
的文档,以了解-D
的作用…可能有任何意义。例如。在npm
中,-D
的意思是“开发”,而在其他一些工具中,它的意思是“目录”。在diff
中,它的意思是“输出合并的文件以显示'#ifdef NAME'差异。”
答案 1 :(得分:1)
一些程序,按照惯例,以-D
作为自我守护的指令。这样做类似于以下内容:
fork()
,如果返回0,则退出(因此只有子代可以幸存)。/dev/null
上的句柄,因此写入操作不会触发错误)。setsid()
创建一个新会话。fork()
,如果再次返回0,则退出。这比someprogram &
要做的工作还要多!自我守护的程序无法再登录到终端,并且如果终端本身关闭也将不再受到影响。对于刚刚在后台启动的程序,情况并非如此。
要从bash中获得与相同行为类似的东西,正确的代码应类似于:
someprogram </dev/null >/dev/null 2>&1 & disown -h
...其中disown -h
告诉外壳程序不要将SIGHUP传递给该进程。经常看到用于此目的的外部工具nohup
也很常见(尽管默认情况下,如果它们指向TTY(最终目的),它会将stdout和stderr重定向到名为nohup.out
的文件- -确保没有 指向终端,因此,即使终端消失了,对它们的写入也不会开始失败-实现):
nohup someprogram >/dev/null &