【问题标题】:Run Java console app as a daemon (background)将 Java 控制台应用程序作为守护进程运行(后台)
【发布时间】:2011-06-25 04:22:23
【问题描述】:

我开发了一个 Java 控制台应用程序,当启动时,打开一个控制台窗口并保持在前台,我想在后台启动该应用程序。

现在我通过这个命令行启动应用程序:

java -jar myapp.jar

有没有办法实现这种行为? 更改命令行参数就足够了,或者我需要对我的代码进行一些更改?

【问题讨论】:

  • 您的问题不清楚。您想作为 Windows 服务运行吗?或者你想要一个控制台窗口?还是两者兼而有之?
  • 你想在什么操作系统中实现这个?
  • 我在 Windows 上,作为 Windows 服务可能是一个很好的解决方案。有没有办法将 Java 控制台应用程序作为 Windows 服务运行?
  • @aleroot,别忘了接受答案。 43% 真的很低。

标签: java jvm jvm-arguments


【解决方案1】:

答案取决于操作系统。

*nix: <your command> &
Windows: (opens a new console): start <your command>
Windows: (doesn't open a new console): start /b <your command>

【讨论】:

    【解决方案2】:

    如果您在任何基于 unix 的环境中执行此操作,则可以将 & 附加到末尾,这将生成一个新线程并使其在后台运行。

    java -jar myapp.jar &
    

    【讨论】:

    • 至少在您注销之前。然后它会带上应用程序。在前面使用nohup
    【解决方案3】:

    如果您真的只是希望它在后台运行,java -jar myapp.jar &amp; 将完成这项工作。这样,当 shell 关闭时它仍然会死掉,但你可以继续使用你的 shell。

    如果您真的希望它作为守护程序运行,nohup java -jar myapp.jar &amp; 将完成这项工作。这样,它会在 shell 关闭时继续存在。

    如果您希望它可靠,您可以准备一个初始化脚本或upstart job definition,或通过 Vixie cron(8) @reboot 说明符运行它以使其在启动时启动。

    【讨论】:

    • 只是想指出这将适用于 Unix 或 Linux 机器,而不适用于 windows。
    【解决方案4】:

    鉴于您使用的是 Windows,您可以考虑使用Java Service Wrapper。我过去曾在一个项目中使用过它。

    【讨论】:

    最近更新 更多