加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用JAVA中的PID验证进程是否正在运行

发布时间:2020-12-15 04:17:32 所属栏目:Java 来源:网络整理
导读:我目前正在JAVA中构建一个只能执行一次的应用程序.所以我目前正在使用一个锁文件,我在其中写入当前执行的PID. 因此,每当此应用程序启动时,它将打开文件(如果存在)并尝试检测文件中写入的PID是否实际正在运行. 这可以防止在解锁文件之前我的应用程序崩溃的问
我目前正在JAVA中构建一个只能执行一次的应用程序.所以我目前正在使用一个锁文件,我在其中写入当前执行的PID.

因此,每当此应用程序启动时,它将打开文件(如果存在)并尝试检测文件中写入的PID是否实际正在运行.

这可以防止在解锁文件之前我的应用程序崩溃的问题.

我需要这个在Windows(XP,7或8)和Linux(所有用户都在基于debian的发行版)上工作.

这里有一些代码可以让您更好地了解我想要做的事情:

//get the PID from the file
int pidValue = new FileReader(file).read();

//get the OS type
String os = System.getProperty("os.name").toLowerCase();

//Check PID depending of OS type
if( os.contains("nux") || os.contains("nix") ){
/*
 * Check PID on Linux/Unix
*/
} else if ( os.contains("win") ) {
/*
 * Check PID on Windows
 */
}

我试图找到关于这个主题的文档,但我找不到任何有用的东西.

非常感谢你.

解决方法

在posix系统上,查询pid是否正在运行的典型方法是向其发送空信号,例如杀(pid,0).如果呼叫成功,则该过程存在;如果它返回ESRCH则不会.这自然会受到不可避免的竞争条件的影响,实际上比实际情况要少得多.不太统一的方法是读取/ proc文件系统(如果操作系统有一个),这是更多的工作,相同的事情,并仍然受到相同的竞争条件.

请注意,pid lockfile技术可以是双层的.也就是说,正在运行的进程会创建文件,锁定它并写入其pid.它在运行期间保持锁定,因此这几乎消除了上述查询进程是否正在运行的需要,因为如果进程崩溃,即使文件仍然存在,文件锁也会自动释放.逻辑是这样的:

if file exists
   if can get lock
       prev instance died unnaturally
       continue with this new process
   else
       instance already running
else
   good to go,continue with new process

这种技术也有竞争条件.

我不记得有足够的Java说它是否有用于执行此方案所需的kill或文件锁定系统调用(如flock,lockf和fcntl)的包装器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读