gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:25:22 25 4
gpt4 key购买 nike

我试过 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)

所以它作为守护进程启动,但如果我执行任何操作(例如更改目录)它会终止进程?如何保持进程运行?

最佳答案

看起来 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 ...>

要解决这个问题,您可以在不同的 session 中运行 sbt 以将其与当前终端分离,这样它就不会打开/dev/tty 并弄乱我们的终端。

关于linux - 如何将 sbt 作为守护进程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com