运行 ps 时是否有竞争条件的风险?

dim*_*414 5 ps background-process

我正在开始一个长时间运行的过程(在 Java 中,在相关的偶然情况下),然后想通过ps. 我基本上是这样做的:

Process longRunningProcess = new ProcessBuilder(...).start();

Process psProcess = new ProcessBuilder("ps").start();
psProcess.waitFor();
// extract the PID from the output of psProcess
Run Code Online (Sandbox Code Playgroud)

或者等效地在 Bash 中:

$ long_running_process > /dev/null & ps
Run Code Online (Sandbox Code Playgroud)

问题是,长期运行的过程是否可能处于某种ps尚未报告的仍在启动状态?或者是否有任何保证在ps执行时,长时间运行的进程将启动到足以可见?重复运行命令似乎总是包含该过程,但这显然不能证明任何事情。

这篇文章警告说,在启动之后 ps启动的命令可能存在竞争条件(例如ps | grep),但没有提到任何关于在 之前启动的进程ps