4
考虑此示例脚本:当/bin/sh
链接PHP proc_open庆典VS短跑
30760 pts/0 S+ 0:00 | \_ php f.php
30761 pts/0 S+ 0:00 | \_ sh -c cat
30762 pts/0 S+ 0:00 | \_ cat
:
<?php
$pipes = array();
$p = proc_open('cat', array(0 => STDIN, 1 => STDOUT, 2 => STDERR), $pipes);
fgetc(STDIN);
当/bin/sh
被链接到/bin/dash
(Debian的默认值),cat
在shell被执行到/bin/bash
然而,cat
是php
的直接子:
30786 pts/0 S+ 0:00 | \_ php f.php
30787 pts/0 S+ 0:00 | \_ cat
这是非常烦人的不一致性,这使得不可能可靠地发送信号产生的过程(因为信号有时被外壳接收)。
为什么proc_open的行为有所不同,取决于/bin/sh
指向哪里? 有没有办法不运行一个shell,即使/bin/sh
不是bash
?
谢谢。我想这是readme.md的“警告”部分。 – Peter
我仍然在用Dash 0.5.8.2看到这个问题,但是我通过在传递给'proc_open()'的命令行前面加上'exec'来解决它。 –