linux – 如何运行sbt作为守护进程?

我试过nohup“sbt run”&

返回:nohup:无法运行命令’sbt run’:没有这样的文件或目录

并试过:

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)

所以它作为守护进程启动但是如果我执行任何操作,例如更改dir,它会杀死进程吗?如何让流程继续运行?

解决方法

看起来sbt从您的终端请求输入.如果它确实不需要输入(在后台运行程序时可能就是这种情况),你可以像这样运行它:
sbt run </dev/null >output-file &

有关详情,请参见this answer.

编辑

好的,现在这是一个难题.简短回答:运行如下:

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并弄乱我们的终端.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...