這是我想了一會兒,並決定問一下。PHP檢查過程ID
我們有函數getmypid(),它將返回當前腳本進程ID。是否有某種功能在PHP如
checkifpidexists()?我的意思是一個內置的而不是一些批處理腳本解決方案。
有沒有辦法更改腳本pid?
一些澄清:
我想檢查是否存在PID,看看,如果你願意的腳本已經運行,因此不要再次運行,人造cron作業。
我想改變PID的原因是這樣我就可以設置腳本PID的東西實在是高,如60000,硬代碼看重因此該腳本只能在運行的pid所以只1它的實例可以運行
編輯----
爲了幫助別人與此proplem,我創建了這個類:
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';
}
pcntl_fork()將不會改變當前進程的PID! pcntl_fork()函數僅在其PID和PPID中創建一個與父進程不同的子進程。請參閱系統的fork(2)手冊頁,以獲取有關fork如何在您的系統上工作的具體細節。 – ennuikiller
嗯,我希望的,如果PID存在:( – Ozzy
隨着我的編輯檢查的更多的跨操作系統的方式,我提到我不認爲他想pcntl_fork(),也不是他會得到的PID選擇。 –