使用JAVA中的PID验证进程是否正在运行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用JAVA中的PID验证进程是否正在运行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1558字,纯文字阅读大概需要3分钟。
内容图文
![使用JAVA中的PID验证进程是否正在运行](/upload/InfoBanner/zyjiaocheng/960/7dbdb751ec90437aa495b38e96ad2486.jpg)
我目前正在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)的包装器.
内容总结
以上是互联网集市为您收集整理的使用JAVA中的PID验证进程是否正在运行全部内容,希望文章能够帮你解决使用JAVA中的PID验证进程是否正在运行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。