Вызова внешнего скрипта из PHP и получить его идентификатор процесса

Как я могу вызвать внешний скрипт оболочки (или, альтернативно, внешний PHP-скрипт) из самого PHP и получить его идентификатор процесса в том же скрипте?

3 ответов


$command =  'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';

$pid = exec($command, $output);

var_dump($pid);

если вы хотите сделать это строго с помощью инструментов PHP дает вам, а не Unix-серверов волшебства, вы можете сделать это с помощью proc_open и proc_get_status, хотя необходимо передать спецификацию дескриптора в proc_open делает его неприятно многословным использовать:

<?php

$descriptorspec = [
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
];
$proc = proc_open('yourcommand', $descriptorspec, $pipes);
$proc_details = proc_get_status($proc);
$pid = $proc_details['pid'];

echo $pid;

для кросс-платформенного решения проверьте symfony / process.

use Symfony\Component\Process\Process;
$process = new Process('sleep 100');
$process->start();
var_dump($process->getPid());

после установки symfony/process с композитором (composer require symfony/process), вам может потребоваться обновить информацию об автоматической загрузке с помощью composer dump-autoload а затем потребовать автозапуск с require __DIR__ . '/vendor/autoload.php';.

обратите внимание также, что вы можете получить PID под управлением