当我通过SSH手动运行此命令时:
xx@xxx.com [~/public_html/xxx]# ls > ls2.out 2>&1 &
[1] 15205
它只返回后台进程的PID,在本例中为15205.但是当我尝试通过PHP代码执行相同操作时:
$run = "ls > ls2.out 2>&1 &";
$return = exec($run, $output, $return_var);
echo '=====', PHP_EOL;
echo var_dump($run);
echo var_dump($return);
echo print_r($output);
echo print_r($return_var);
echo '=====', PHP_EOL;
它不会返回PID,只是一个空字符串:
=====
string(19) "ls > ls2.out 2>&1 &"
string(0) ""
Array
(
)
101=====
为什么?
如何通过PHP exec()获取后台进程的PID?
答案 0 :(得分:1)
使用proc_open
进行子进程,使用proc-get-statu
来获取pid。对于exec,请参阅此post。
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$command = 'ping -c 10 stackoverflow.com';
$process = proc_open($command, $descriptorspec, $pipes);
echo 'hahaha';