当前位置: 代码迷 >> java >> 如何防止Nohup杀死等待stdin linux的java进程
  详细解决方案

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

热度:72   发布时间:2023-07-17 21:01:30.0

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

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

示例:$ nohup java -jar myApp.jar

我尝试将程序的输出重定向到其他建议的2> / dev / null以及使用在后台运行。 两者都不能阻止nohup被杀死。

我不能使用disown,因为一旦运行该程序,我将失去命令提示符。

要使您的程序在后台运行,请运行tmux

tmux

这将打开一个tmux shell,您可以在其中运行程序:

java -jar myApp.jar

然后,要与tmux会话分离,请键入ctrl-b然后输入d 您的程序将继续在后台运行。

要在以后重新连接到程序的外壳程序(杀死它或查看其输出),请运行tmux attach

尽管tmux解决了我的问题,但我一直四处闲逛并玩弄disown,直到我开始使用它。 我可以通过注销一个超长睡眠命令(在建议),在后台运行它,然后运行disown ,使注销后的Java进程保持运行状态 像这样:

$ sleep 999999999 | java -jar myApp.jar&

$舍弃

因此,我将坚持使用tmux ,但我只是想分享一下,因为它可以很好地解决我的问题。

  相关解决方案