Invoke external shell script from PHP and get its

2019-01-18 02:26发布

How can I invoke an external shell script (Or alternatively an external PHP script) from PHP itself and get its process ID within the same script?

3条回答
Viruses.
2楼-- · 2019-01-18 03:04
$command =  'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';

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

var_dump($pid);
查看更多
干净又极端
3楼-- · 2019-01-18 03:06

If you want to do this strictly using tools PHP gives you, rather than Unix-specific wizardry, you can do so with proc_open and proc_get_status, although the need to pass a descriptor spec into proc_open makes it unpleasantly verbose to use:

<?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;
查看更多
太酷不给撩
4楼-- · 2019-01-18 03:13

For a cross-platform solution, check out symfony/process.

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

After you install symfony/process with composer (composer require symfony/process), you may need to update autoloading info with composer dump-autoload and then require the autoload with require __DIR__ . '/vendor/autoload.php';.

Notice also that you can get PID of a running process only. Refer to the documentation for API details.

查看更多
登录 后发表回答