使用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)的包装器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |