2016-11-16 80 views
4

我试过nohup "sbt run" &如何将sbt作为守护进程运行?

回报:nohup: failed to run command ‘sbt run’: No such file or directory

,并试图:

nohup sbt run & 
[2] 7897 
# nohup: ignoring input and appending output to ‘nohup.out’ 

当我回车期待进程继续运行,我收到:

[2]+ Stopped     nohup sbt run 

如何运行sbt作为一个守护进程?

更新:

sbt run </dev/null & 
[5] 8961 

我觉得CD了一个目录:

# cd .. 

[5]+ Stopped     sbt run < /dev/null (wd: /home/sum) 
(wd now: /home) 

所以它开始作为后台进程,但如果我执行任何操作,例如更改目录,它杀死的过程吗?如何保持过程运行?

回答

6

看起来像sbt从您的终端请求输入。如果不真正需要输入(这大概就是这样,当你在后台运行的程序),你可以像这样运行:

sbt run </dev/null >output-file & 

详见this answer

编辑

好的,现在这是一个谜题。简短的回答:运行sbt如下:

setsid nohup sbt run & 

理由:

之所以sbt站是SIGTTOU信号的到来。它在几种情况下被传送到后台进程,其中包括修改终端配置。这是我们的情况,因为根据strace -f sbt run &sbt做了很多的黑魔法罩这样下:

[pid 16600] execve("/usr/bin/sh", ["sh", "-c", "stty -g < /dev/tty"], [/* 75 vars */] <unfinished ...> 

要围绕工作这一点,你可以在不同的会话中运行sbt从目前的终端分离,所以它不会打开/ dev/tty并且弄乱我们的终端。

+0

请参阅更新 –

+0

@蓝天更新。 –

相关问题