Esto es algo que me he preguntado por un tiempo y decidí preguntar al respecto.PHP Check Process ID
Tenemos la función getmypid() que devolverá el id del proceso actual de scripts. ¿Hay algún tipo de función como
checkifpidexists() en php? Me refiero a una solución de script incorporada y no de lotes.
¿Y hay alguna manera de cambiar los scripts pid?
algunas aclaraciones:
Quiero comprobar si existe un PID para ver si el guión ya está en ejecución por lo que No corra de nuevo, trabajo cron falso si se quiere.
La razón por la que quería cambiar el pid es para poder establecer el script pid en algo realmente alto como 60000 y el código duro que valor para que este script solo pueda ejecutarse en ese pid para que solo 1 instancia funcione
EDITAR ----
para ayudar a cualquier persona con esta proplem, he creado esta clase:
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;
}
}
y usarlo de esta manera:
$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() no cambiará los procesos actuales pid! La función pcntl_fork() crea un proceso hijo que difiere del proceso primario solo en su PID y PPID. Consulte la página de manual de la horquilla (2) de su sistema para obtener detalles específicos sobre cómo funciona la horquilla en su sistema. – ennuikiller
hmm, estaba esperando una manera más cruzada de comprobar si existía un pid :( – Ozzy
Con mi edición, mencioné que no creo que él quiera pcntl_fork(), ni tampoco tendría la opción de pid. –