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

Chr*_*der 23 php external-process

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

Bor*_*éry 41

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

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

var_dump($pid);
Run Code Online (Sandbox Code Playgroud)

  • 它的意思是“将所有输出发送到空设备,这意味着所有输出将在标准输出中可用,并且 echo $! 只需回显脚本捕获的 pid (2认同)

Mar*_*ery 21

如果你想严格地使用PHP提供的工具,而不是特定Unix的魔法,你可以使用proc_openproc_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;
Run Code Online (Sandbox Code Playgroud)