java - 即使在 2 个不同的 JVM 中,我们如何确保任何应用程序只有一个实例在运行

标签 java unix operating-system

我在面试时被问到这个问题。 假设 VLC 播放器在那里并在我们的操作系统上运行。 现在,当我们再次尝试启动 VLC 时,应该不会发生这种情况。

或者,假设我们有两个命令窗口,我们在两个不同的窗口中运行相同的 java 程序。我们如何确保只运行一次。

这是操作系统依赖的东西吗? 什么是实现?

我读了一些关于 MUTEX/Semaphore 的内容,但我猜那只在一个 JVM 中。

最佳答案

您可以将 pid 文件写入磁盘的已知位置,表明应用程序已经在运行。然后,在启动时,查找该文件。如果它在那里,应用程序已经在运行,所以退出。

留给读者作为练习:确保即使在应用程序崩溃时也删除了 pid 文件。

关于java - 即使在 2 个不同的 JVM 中,我们如何确保任何应用程序只有一个实例在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25826765/

相关文章:

macos - mac 上进程的内存快照?

linux - $* 和 $@ 有什么区别

mysql - 解释 top 实用程序中的交换

multithreading - 如果操作系统管理的同一进程中的两个线程同时访问同一虚拟地址,那么在两个执行单元中会发生什么?

linux - 检测堆栈溢出

java - 如何使用 webdriver 在鼠标悬停时保持下拉菜单打开

java - 下面提供的 2 种验证 gremlin 节点和边的最佳方法是什么?

java - 如何使用 android 4.0 日历提供程序 API 选择要从中提取事件的日历?

linker - 动态链接和动态加载有什么区别

java - 带有背景图像和 JPanel 的 JFrame