我正在做一个具有以下规格的项目:
现在,由于上面3的性质,我通过proc_open将它传递给了一些后台进程。问题是,如果我包括'&'在主进程的命令中如下:
$descriptorspec = array(
0=>array("pipe","r"),
1=>array("file", "log.txt", "a" ),
2=>array("file", "log.txt", "a" )
);
$command = 'php smschildprocess.php &';
$input = 'some text input';
$proc = proc_open( $command, $descriptorspec, $pipes );
fwrite($pipes[0], $input);
fclose($pipes[0]);
proc_close($proc);
并尝试从子进程获取输入:
$input = stream_get_contents(STDIN);
变量$input
只有空格。如果从命令中删除尾随&
,我会在子进程中获得输入,但它会阻止主进程。
只是补充一下,这个问题只发生在生产服务器上,这是一个Linux机箱,但是在我的开发机器上,一个Windows框,我做的事情就像$command = 'start /b php smschildprocess.php';
一样,无论是否使用{{{{}}进行非阻塞,一切正常1}}或其他没有start /b
的情况
我花了几天时间查看文档和示例代码,我做错了什么?