. * */ namespace Friendica\Model; use Friendica\Database\Database; use Friendica\Util\DateTimeFormat; /** * functions for interacting with a process */ class Process { /** @var Database */ private $dba; public function __construct(Database $dba) { $this->dba = $dba; } /** * Insert a new process row. If the pid parameter is omitted, we use the current pid * * @param string $command * @param int $pid The process id to insert * @return bool * @throws \Exception */ public function insert(string $command, int $pid) { $return = true; $this->dba->transaction(); if (!$this->dba->exists('process', ['pid' => $pid])) { $return = $this->dba->insert('process', ['pid' => $pid, 'command' => $command, 'created' => DateTimeFormat::utcNow()]); } $this->dba->commit(); return $return; } /** * Remove a process row by pid. If the pid parameter is omitted, we use the current pid * * @param int $pid The pid to delete * @return bool * @throws \Exception */ public function deleteByPid(int $pid) { return $this->dba->delete('process', ['pid' => $pid]); } /** * Clean the process table of inactive physical processes */ public function deleteInactive() { $this->dba->transaction(); $processes = $this->dba->select('process', ['pid']); while($process = $this->dba->fetch($processes)) { if (!posix_kill($process['pid'], 0)) { $this->deleteByPid($process['pid']); } } $this->dba->close($processes); $this->dba->commit(); } }