如果不等待,后台进程不会在Linux中选择输入

时间:2018-03-13 15:27:35

标签: php linux child-process

我正在做一个具有以下规格的项目:

  1. 用户输入一些数据,包括某人的电话号码。
  2. 系统根据用户输入进行一些计算,并将结果保存在DB中。
  3. 如果2成功,则通过一些API调用将短信发送到1中包含的电话号码
  4. 在收到2成功通知之前,用户无需等待3结束。
  5. 现在,由于上面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的情况 我花了几天时间查看文档和示例代码,我做错了什么?

0 个答案:

没有答案