我想知道有什么方法可以控制我的 jar 启动的进程的名称,即
我在 java 中创建了一个 .jar 文件,每当我点击它时,它都会导致一个名为 javaw.exe 的进程,我想要来控制这个名字。我想这样做是因为当我单击我的 jar 文件时,如果它已经在运行,它应该停止并且应该启动一个新的,即,我想在每次单击它时通过停止前一个来运行一个新线程(进程) . 如果我终止名为 javaw.exe 的进程,所有名为 javaw.exe 的进程都会死掉(如果我正在运行多个程序)。所以,我需要改变它的名字。请帮忙。谢谢 !
3 回答
javaw
跑步 没什么不好。从文档中:
javaw 命令与 java 相同,只是 javaw 没有关联的控制台窗口。当您不希望出现命令提示符窗口时,请使用 javaw。但是,如果由于某种原因启动失败,javaw 启动器将显示一个包含错误信息的对话框。
最终,javaw
在没有控制台窗口的情况下运行您的程序。更改该名称可能会在以后导致一些严重的问题,因此您希望保留该特定程序名称。
为什么要重新发明轮子?已经有一些标准方法可以防止同一程序的两个副本运行。通常它涉及创建一个“标志”文件,因为文件系统保证目录更新是原子的。在类 UNIX 系统上,该文件是 /var/run/program-name.pid。如果它已经存在,那么第二个副本将退出并出现错误。
您可以设置一个控制器进程来管理您的实例:
首先,您尝试通过 tcp/ip 在特定端口(从现在开始您的程序“名称”)连接到 localhost 上的控制器,如果成功,则向该控制器发送一条消息,如“新实例已启动”。如果连接不成功,则在当前 vm 中启动一个新的控制器线程(并将消息再次发送到该线程)
控制器循环,等待消息,如果一个匹配“新实例启动”,它会按照您的描述进行。
可以使用简单的 ServerSocket、小型 HTTP 服务器或许多其他消息传递库轻松构建这样的控制器。