代码之家  ›  专栏  ›  技术社区  ›  Christian Studer delphist

从PHP调用外部shell脚本并获取其进程ID

  •  21
  • Christian Studer delphist  · 技术社区  · 15 年前

    如何从PHP本身调用外部shell脚本(或者外部php脚本),并在同一个脚本中获取其进程ID?

    3 回复  |  直到 6 年前
        1
  •  37
  •   Boris Guéry    11 年前
    $command =  'yourcommand' . ' > /dev/null 2>&1 & echo $!; ';
    
    $pid = exec($command, $output);
    
    var_dump($pid);
    
        2
  •  13
  •   Community Keith    7 年前

    如果您想严格使用PHP提供的工具来完成这项工作,而不是 Unix-specific wizardry ,你可以这样做 proc_open proc_get_status 尽管需要将描述符规范传递到 普罗开 使其难以使用的冗长:

    <?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;
    
        3
  •  2
  •   Mikhail Vasin    6 年前

    对于跨平台解决方案,请查看 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'; .

    还请注意,您可以获得 运行 仅处理。参照 the documentation 有关API的详细信息。