相关疑难解决方法(0)

使用 JAVA 中的 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
 */
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢。

java linux windows

6
推荐指数
1
解决办法
8613
查看次数

是否可以为不是从我的代码启动的进程创建 java.lang.Process 实例?

我有一个进程(在 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(),以查看是否在提到的“子”其描述“杀死子进程”指的是这一进程。

java process selenium-chromedriver

3
推荐指数
1
解决办法
871
查看次数

标签 统计

java ×2

linux ×1

process ×1

selenium-chromedriver ×1

windows ×1