问题描述
我有一个在命令行(Bash Linux)上执行的Java程序。 一旦执行,程序将继续运行,读取标准输入,直到用户输入“退出”为止。
有时,我想nohup该程序,以便即使关闭远程连接也可以继续运行。 问题是,当我尝试按以下所示对程序进行nohup时,似乎其输入stdin的提示会杀死nohup并终止该程序。
示例:$ nohup java -jar myApp.jar
我尝试将程序的输出重定向到其他建议的2> / dev / null以及使用&在后台运行。 两者都不能阻止nohup被杀死。
我不能使用disown,因为一旦运行该程序,我将失去命令提示符。
1楼
要使您的程序在后台运行,请运行tmux
:
tmux
这将打开一个tmux shell,您可以在其中运行程序:
java -jar myApp.jar
然后,要与tmux会话分离,请键入ctrl-b
然后输入d
。
您的程序将继续在后台运行。
要在以后重新连接到程序的外壳程序(杀死它或查看其输出),请运行tmux attach
。
2楼
尽管tmux解决了我的问题,但我一直四处闲逛并玩弄disown,直到我开始使用它。 我可以通过注销一个超长睡眠命令(在建议),在后台运行它,然后运行disown ,使注销后的Java进程保持运行状态 。 像这样:
$ sleep 999999999 | java -jar myApp.jar&
$舍弃
因此,我将坚持使用tmux ,但我只是想分享一下,因为它可以很好地解决我的问题。