Это то, что я задавался вопросом на некоторое время и решил спросить об этом.
У нас есть функция getmypid(), которая возвращает текущий идентификатор процесса скрипта. Есть ли какая-то функция, например
checkifpidexists () в php? Я имею в виду встроенный, а не какое-то решение для пакетного сценария.
И есть ли способ изменить pid скриптов?
Некоторое уточнение:
Я хочу проверить, существует ли pid, чтобы увидеть, запущен ли уже скрипт, чтобы он больше не запускался, если хотите, поддельное задание cron.
Причина, по которой я хотел изменить pid, заключается в том, что я могу установить pid скрипта на что-то действительно высокое, например 60000, и жестко закодировать это значение, чтобы этот скрипт мог работать только с этим pid, чтобы работал только 1 экземпляр.
РЕДАКТИРОВАТЬ----
Чтобы помочь кому-либо еще с этой проблемой, я создал этот класс:
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;
}
}
и вы используете его так:
$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';
}