我目前正在用 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
*/
}
Run Code Online (Sandbox Code Playgroud)
我试图找到关于这个主题的文档,但我还没有找到任何有用的东西。
非常感谢。
我有一个进程(在 Windows 上名为chromedriver.exe),它是在我创建Selenium Chrome Driver的新实例时创建的。
所以我不会自己开始这个过程,但java.lang.Process如果可能的话,我想要一个代表该过程的实例。
我想创建这样的实例的原因是我想Process.waitFor()在我发出(如果在 Windows 上)a 之后调用等待直到进程实际终止Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe")。
我不能仅针对此特定需求引入对第三方库的新依赖。我可以使用 Apache Commons 中的任何东西。
所以问题是:有没有办法从我的代码中获取一个Process代表未从我的代码启动的正在运行的进程的实例?
我希望能够终止该进程的原因是像 JVM 崩溃这样的突然终止可能不会WebDriver.quit()终止该进程。因此,在创建导致进程启动的 ChromeDriver 实例之前,我想终止任何可能已经存在的此类进程。
我使用exec("taskkill...")在 Windowskillall上终止进程的原因(我在 Linux 上使用)是到目前为止我发现的唯一方法,但是如果有可能获得Process代表该进程的实例,我也会尝试使用Process.destroy(),以查看是否在提到的“子”其描述“杀死子进程”指的是这一进程。