我有一个在命令行(Bash Linux)上执行的java程序。一旦执行,程序继续运行,读取标准输入,直到用户输入'退出'。
有时我想 nohup 程序,所以即使我的远程连接关闭它也会继续运行。问题是,当我尝试nohup程序时,如下所示,似乎它对stdin的提示会杀死nohup并终止该程序。
示例:$ nohup java -jar myApp.jar
我尝试将程序的输出重定向到其他建议的 2> / dev / null ,并使用& 在后台运行它。也没有阻止nohup被杀害。
我无法使用 disown ,因为一旦我运行该程序,我就会失去该程序的命令提示符。
答案 0 :(得分:0)
要让您的程序在后台运行,请运行tmux
:
tmux
这将打开一个tmux shell,您可以在其中运行程序:
java -jar myApp.jar
然后要从tmux会话中分离,请键入ctrl-b
,然后键入d
。您的程序将继续在后台运行。
要稍后重新连接到程序的shell(要删除它或查看其输出),请运行tmux attach
。
答案 1 :(得分:0)
虽然 tmux 解决了我的问题,但我一直在玩 disown ,直到我开始工作。通过管理超长睡眠命令(在this thread中建议),在后台运行它,然后运行 disown,我能够在注销后保持java进程运行即可。像这样:
$ sleep 999999999 | java -jar myApp.jar&
$ disown
所以,我会坚持使用 tmux ,但我只是认为我会分享这个,因为它对我的问题起作用。