如何防止nohup杀死等待stdin linux的java进程

时间:2015-07-31 00:34:19

标签: java linux bash

我有一个在命令行(Bash Linux)上执行的java程序。一旦执行,程序继续运行,读取标准输入,直到用户输入'退出'。

有时我想 nohup 程序,所以即使我的远程连接关闭它也会继续运行。问题是,当我尝试nohup程序时,如下所示,似乎它对stdin的提示会杀死nohup并终止该程序。

  

示例:$ nohup java -jar myApp.jar

我尝试将程序的输出重定向到其他建议的 2> / dev / null ,并使用& 在后台运行它。也没有阻止nohup被杀害。

我无法使用 disown ,因为一旦我运行该程序,我就会失去该程序的命令提示符。

2 个答案:

答案 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 ,但我只是认为我会分享这个,因为它对我的问题起作用。