【发布时间】:2021-10-06 15:40:13
【问题描述】:
我有两个 Java 11 方法来检查给定 PID 的进程是否正在运行:
public static final boolean isProcessRunning( final long pid ) {
Optional< ProcessHandle > optionalProcess = ProcessHandle.of( pid );
return optionalProcess.isPresent() && optionalProcess.get().isAlive();
}
public static boolean isProcessRunning2( final long pid ) {
return ProcessHandle.allProcesses()
.filter( p -> p.pid() == pid )
.anyMatch( p -> p.isAlive() );
}
在 Linux 客户端上检查多个 PID 时,我有时会得到某些 PID 的不同结果,其中第一个实现总是返回 true,而第二个实现总是返回 false。
使用 shell 命令ps -ef | grep <pid> 检查一些“误报”表明第一次实现似乎是错误的,操作系统也不知道这些进程。
假设第二个实现总是正确的,但似乎效率很低。
第一个实现有什么问题,我该如何解决?
【问题讨论】:
标签: java linux pid isalive processhandle