bool WatcherRunner::watch(const PlatformProcess& child) const { int status = 0; ProcessState result = checkChildProcessStatus(child, status); if (Watcher::fatesBound()) { // A signal was handled while the watcher was watching. return false; } if (!child.isValid() || result == PROCESS_ERROR) { // Worker does not exist or never existed. return false; } else if (result == PROCESS_STILL_ALIVE) { // If the inspect finds problems it will stop/restart the worker. if (!isChildSane(child)) { stopChild(child); return false; } return true; } if (result == PROCESS_EXITED) { // If the worker process existed, store the exit code. Watcher::instance().worker_status_ = status; } return true; }
bool isLauncherProcessDead(PlatformProcess& launcher) { if (!launcher.isValid()) { return true; } return (::getppid() != launcher.nativeHandle()); }