【问题标题】:Controlling Process Name of my Jar控制我的 Jar 的进程名称
【发布时间】:2013-01-28 04:28:24
【问题描述】:

我想知道有什么方法可以控制我的 jar 启动的进程的名称,即
我在 java 中创建了一个 .jar 文件,每当我单击它时,它都会导致一个名为 javaw.exe 的进程,我想控制这个名称。 我想这样做是因为当我单击我的 jar 文件时,如果它已经在运行,它应该停止并且应该启动一个新的,即,我想在每次单击它时通过停止前一个来运行一个新线程(进程) . 如果我终止名为 javaw.exe 的进程,所有名为 javaw.exe 的进程都会死掉(如果我正在运行多个程序)。所以,我需要改变它的名字。 请帮忙。 谢谢!

【问题讨论】:

    标签: java


    【解决方案1】:

    javaw 运行没有任何问题。 From the documentation:

    javaw 命令与 java 相同,只是 javaw 没有关联的控制台窗口。当您不希望出现命令提示符窗口时,请使用 javaw。但是,如果由于某种原因启动失败,javaw 启动器将显示一个包含错误信息的对话框。

    最终,javaw 在没有控制台窗口的情况下运行您的程序。更改该名称可能会在以后导致一些严重的问题,因此您希望保留该特定程序名称。

    【讨论】:

      【解决方案2】:

      为什么要重新发明轮子?已经有一些标准方法可以防止同一程序的两个副本运行。通常它涉及创建一个“标志”文件,因为文件系统保证目录更新是原子的。在类 UNIX 系统上,该文件是 /var/run/program-name.pid。如果它已经存在,那么第二个副本将退出并出现错误。

      【讨论】:

        【解决方案3】:

        您可以设置一个控制器进程来管理您的实例:

        首先,您尝试通过 tcp/ip 在特定端口(您的程序“名称”从现在开始)连接到 localhost 上的控制器,如果成功,则向该控制器发送一条消息,如“新实例已启动”。如果连接不成功,则在当前 vm 中启动一个新的控制器线程(并将消息再次发送到该线程)

        控制器循环,等待消息,如果一个匹配“新实例启动”,它会按照您的描述进行操作。

        可以使用简单的 ServerSocket、小型 HTTP 服务器或许多其他消息传递库轻松构建这样的控制器。

        【讨论】:

          猜你喜欢
          • 2011-05-13
          • 2023-03-24
          • 2013-02-18
          • 1970-01-01
          • 2010-12-30
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多