Вызова внешнего скрипта из 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 под управлением