【问题标题】:Background java process not exiting后台java进程不退出
【发布时间】:2010-01-20 14:58:08
【问题描述】:

我正在使用java what.ever.Class & 在后台启动一个 java 程序。它在第一行抛出异常并打印出堆栈。

我希望 java 进程在那时退出,但由于某种原因它一直在那里等待(没有代码运行,没有产生线程等)。它不是僵尸,因为它在第一个 SIGTERM 时正确退出。它没有立即退出的原因可能是什么?

添加:

实际上,并非每次都会发生这种情况。如果我从命令行运行命令 - 它退出就好了。如果从脚本运行相同的命令(脚本只是 #!/bin/sh / java what.ever.Class &),那么它会留在后台。

nohup 和重定向不起作用。

使用 Debian,OpenJDK 运行时环境 (IcedTea6 1.6.1) (6b16-1.6.1-2) / OpenJDK 64 位服务器 VM(内部版本 14.0-b16,混合模式)。 sh 实际上是破折号。

【问题讨论】:

  • 我们是否应该在没有看到 what.ever.Class 的样子的情况下进行猜测?
  • 我不推荐使用Class作为类名:-P
  • @skaffman - 是的,因为没关系 - 我说它会在第一行引发异常。 main() {throw new Exception();} 如果你真的需要它;)
  • 或许您应该知道您使用的是哪个 Java 版本和操作系统?
  • @jarnbjo - 现在将信息添加到问题中。

标签: java linux process background


【解决方案1】:

你能检查它是否处于等待输入或输出的停止状态吗?

如果是,则尝试重定向输入、输出和不需要的错误:

java what.ever.Class </dev/null &>/dev/null &

如果需要,也可以放入文件中:

java what.ever.Class </dev/null &>outputfile &

或通过nohup,如果您需要输出并希望进程在您注销后继续运行:

nohup java what.ever.Class </dev/null &

【讨论】:

  • 不幸的是,它们都不起作用。我在问题中添加了更多信息。
  • @viraptor:只是为了确保它不是 Java 实现,你能在另一个 Java 实现上再试一次吗?
猜你喜欢
  • 2015-05-10
  • 2014-07-03
  • 2015-10-31
  • 2012-01-01
  • 1970-01-01
  • 2014-06-26
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多