Чтобы получить PID (идентификатор процесса) команды PHP exec, вы можете использовать различные методы. Вот несколько примеров:
Метод 1: использование execи pgrepв системах на базе Linux/Unix
$command = 'your_command_here';
exec("pgrep -f \"$command\"", $output);
$pid = !empty($output) ? (int)$output[0] : null;
if ($pid !== null) {
echo "PID: $pid";
} else {
echo "Unable to retrieve PID.";
}
Метод 2: использование proc_openи proc_get_status
$command = 'your_command_here';
$descriptors = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w']
];
$process = proc_open($command, $descriptors, $pipes);
if (is_resource($process)) {
$status = proc_get_status($process);
$pid = $status['pid'];
echo "PID: $pid";
// Close any open pipes
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
// Close the process
proc_close($process);
} else {
echo "Failed to execute the command.";
}
Метод 3: использование shell_execи pidofв системах на базе Linux/Unix
$command = 'your_command_here';
$output = shell_exec("pidof -s \"$command\"");
$pid = !empty($output) ? (int)$output : null;
if ($pid !== null) {
echo "PID: $pid";
} else {
echo "Unable to retrieve PID.";
}
Метод 4. Использование wmicв системах под управлением Windows
$command = 'your_command_here';
$output = [];
exec("wmic process where \"commandline like '%$command%'\" get processid 2>&1", $output);
foreach ($output as $line) {
if (is_numeric($line)) {
$pid = (int)$line;
echo "PID: $pid";
break;
}
}
if (!isset($pid)) {
echo "Unable to retrieve PID.";
}
Обратите внимание, что доступность и эффективность этих методов могут различаться в зависимости от операционной системы и конфигурации сервера.