Đây là điều tôi đã tự hỏi một lúc và quyết định hỏi về nó.Quy trình kiểm tra PHP ID
Chúng tôi có hàm getmypid() sẽ trả về id quá trình tập lệnh hiện tại. Có một số loại chức năng như
checkifpidexists() trong php? Tôi có nghĩa là một sẵn có và không phải là một số giải pháp hàng loạt kịch bản.
Và có cách nào để thay đổi tập lệnh pid không?
Một số làm rõ:
tôi muốn kiểm tra xem một pid tồn tại để xem nếu kịch bản vẫn đang chạy nên nó không chạy lại, công việc định kỳ giả nếu bạn sẽ. Lý do tôi muốn thay đổi pid là vì vậy tôi có thể thiết lập các pid script để một cái gì đó thực sự cao như 60000 và mã cứng có giá trị để kịch bản này chỉ có thể chạy trên pid đó để chỉ có 1 trường hợp của nó sẽ chạy
EDIT ----
Để giúp bất cứ ai khác với proplem này, tôi đã tạo ra lớp này:
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;
}
}
và bạn sử dụng nó như vậy:
$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() sẽ không thay đổi các quy trình hiện tại pid! Hàm pcntl_fork() tạo ra một tiến trình con khác với tiến trình cha chỉ trong PID và PPID của nó. Vui lòng xem trang nhánh (2) dành cho người đàn ông của hệ thống của bạn để biết chi tiết cụ thể về cách hoạt động của hệ thống của bạn. – ennuikiller
hmm, tôi đã hy vọng một cách vượt trội hơn để kiểm tra nếu một pid tồn tại: ( – Ozzy
Với chỉnh sửa của tôi, tôi đề cập đến tôi không nghĩ rằng anh ta muốn pcntl_fork(), cũng không có được sự lựa chọn của pid –