To jest coś, przez co zastanawiałem się przez chwilę i postanowiłem o to zapytać.PHP Check Process ID
Mamy funkcję getmypid(), która zwróci bieżący identyfikator procesu skryptu. Czy jest jakaś funkcja, taka jak
checkifpidexists() w php? Mam na myśli rozwiązanie wbudowane, a nie jakieś rozwiązanie skryptu wsadowego.
A czy istnieje sposób na zmianę skryptu pid?
Niektóre wyjaśnienia:
Chcę sprawdzić, czy istnieje PID aby sprawdzić, czy skrypt działa już tak dont uruchomić ponownie, faux crona jeśli będzie.
Powodem, dla którego chciałem zmienić pid jest to, że mogę ustawić pid skryptu na coś naprawdę wysokiego, takiego jak 60000 i twardy kod, którego wartość, więc ten skrypt może działać tylko na tym pidzie, więc tylko 1 wystąpienie tego byłoby uruchomione
EDIT ----
Aby pomóc nikogo innego z tego proplem, Stworzyłem tę klasę:
class instance {
private $lock_file = '';
private $is_running = false;
public function __construct($id = __FILE__) {
$id = md5($id);
$this->lock_file = sys_get_temp_dir() . $id;
if (file_exists($this->lock_file)) {
$this->is_running = true;
} else {
$file = fopen($this->lock_file, 'w');
fclose($file);
}
}
public function __destruct() {
if (file_exists($this->lock_file) && !$this->is_running) {
unlink($this->lock_file);
}
}
public function is_running() {
return $this->is_running;
}
}
i go używać tak:
$instance = new instance('abcd'); // the argument is optional as it defaults to __FILE__
if ($instance->is_running()) {
echo 'file already running';
} else {
echo 'file not running';
}
pcntl_fork() nie zmieni bieżącego procesu pid! Funkcja pcntl_fork() tworzy proces podrzędny, który różni się od procesu nadrzędnego tylko w jego PID i PPID. Zobacz stronę podręcznika systemowego fork (2) systemu, aby uzyskać szczegółowe informacje na temat działania wideł w systemie. – ennuikiller
hmm, miałem nadzieję na lepszy sposób sprawdzania, czy pid istniał :( – Ozzy
Z moją edycją wspomniałem, że nie myślę, że chce on pcntl_fork(), ani nie dostanie wyboru pid. –