Detecting whether a process exists or not by its PID?
On 08/31/2018 01:18 AM, Henrik Bengtsson wrote:
Hi, I'd like to test whether a (localhost) PSOCK cluster node is still running or not by its PID, e.g. it may have crashed / core dumped. I'm ok with getting false-positive results due to *another* process with the same PID has since started.
kill(sig=0) is specified by POSIX but indeed as you say there is a race condition due to PID-reuse.? In principle, detecting that a worker process is still alive cannot be done correctly outside base R. At user-level I would probably consider some watchdog, e.g. the parallel tasks would be repeatedly touching a file. In base R, one can do this correctly for forked processes via mcparallel/mccollect, not for PSOCK cluster workers which are based on system() (and I understand it would be a useful feature) > j <- mcparallel(Sys.sleep(1000)) > mccollect(j, wait=FALSE) NULL # kill the child process > mccollect(j, wait=FALSE) $`1542` NULL More details indeed in ?mcparallel. The key part is that the job must be started as non-detached and as soon as mccollect() collects is, mccollect() must never be called on it again. Tomas
I can the PID of each cluster nodes by querying them for their
Sys.getpid(), e.g.
pids <- parallel::clusterEvalQ(cl, Sys.getpid())
Is there a function in core R for testing whether a process with a
given PID exists or not? From trial'n'error, I found that on Linux:
pid_exists <- function(pid) as.logical(tools::pskill(pid, signal = 0L))
returns TRUE for existing processes and FALSE otherwise, but I'm not
sure if I can trust this. It's not a documented feature in
?tools::pskill, which also warns about 'signal' not being standardized
across OSes.
The other Linux alternative I can imagine is:
pid_exists <- function(pid) system2("ps", args = c("--pid", pid),
stdout = FALSE) == 0L
Can I expect this to work on macOS as well? What about other *nix systems?
And, finally, what can be done on Windows?
I'm sure there are packages on CRAN that provides this, but I'd like
to keep dependencies at a minimum.
I appreciate any feedback. Thxs,
Henrik
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel