Мы хотели бы проверить, запущен ли указанный процесс через PHP.
Мы хотели бы просто предоставить PID и посмотреть, выполняется ли он в настоящее время или нет.
Есть ли у PHP внутренняя функция, которая предоставит нам эту информацию или нам придется анализировать ее из вывода «ps»?
Если вы находитесь в Linux, попробуйте следующее:
if (file_exists( "/proc/$pid" )){ //process with a pid = $pid is running }
posix_getpgid($pid);
вернет false, когда процесс не запущен
Если вы хотите, чтобы у него была функция, тогда:
$running = posix_kill($pid,0);
Отправьте сигнал sig в процесс с идентификатором процесса pid.
Вызов posix_kill
с сигналом 0 kill вернет true
если процесс запущен, в противном случае – false
.
Я бы назвал сценарий bash, используя shell_exec
$pid = 23818; if (shell_exec("ps aux | grep " . $pid . " | wc -l") > 0) { // do something }
Я думаю, posix_kill(posix_getpgrp(), 0)
– лучший способ проверить, работает ли PID, он доступен только на платформах Windows.
Это то же самое, что kill -0 PID
на оболочке и shell_exec('kill -0 PID')
на PHP, но нет вывода ERROR, когда pid не существует.
В раздвоенном дочернем процессе posix_getpgid
возвращает родительский pid всегда, даже если родительский posix_getpgid
был прерван.
<?php $pid = pcntl_fork(); if ($pid === -1) { exit(-1); } elseif ($pid === 0) { echo "in child\n"; while (true) { $pid = posix_getpid(); $pgid = posix_getpgid($pid); echo "pid: $pid\tpgid: $pgid\n"; sleep(5); } } else { $pid = posix_getpid(); echo "parent process pid: $pid\n"; exit("parent process exit.\n"); }
я сделал для этого сценарий, который im использует в wordpress для отображения статуса игрового сервера, но это будет работать со всем запуском процесса на сервере
<?php //########################################## // desc: Diese PHP Script zeig euch ob ein Prozess läuft oder nicht // autor: seevenup // version: 0.2 //########################################## if (!function_exists('server_status')) { function server_status($string,$name) { $pid=exec("pidof $name"); exec("ps -p $pid", $output); if (count($output) > 1) { echo "$string: <font color='green'><b>RUNNING</b></font><br>"; } else { echo "$string: <font color='red'><b>DOWN</b></font><br>"; } } } //Beispiel "Text zum anzeigen", "Prozess Name auf dem Server" server_status("Running With Rifles","rwr_server"); server_status("Starbound","starbound_server"); server_status("Minecraft","minecarf"); ?>
//For Linux $pid='475678'; exec('ps -C php -o pid', $a); if(in_array($pid, $a)){ // do something... }