PHP proc_open bash vs dash

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP proc_open bash vs dash脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑以下示例脚本:

<?PHP

$piPEs = array();
$p = PRoc_open('cat',array(0 => STDIN,1 => STDOUT,2 => STDERR),$pipes);
fgetc(STDIN);

当/ bin / sh符号链接到/ bin / dash(Debian认值)时,cat会在shell中执行:

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

当/ bin / sh链接到/ bin / bash但是,cat是PHP的直接子代:

30786 pts/0    S+     0:00  |           \_ PHP f.PHP
30787 pts/0    S+     0:00  |               \_ cat

这是非常恼人的不一致性,这使得无法可靠地发送产生过程的信号(因为信号有时被shell接收).

为什么proc_open的行为会有所不同,具体取决于/ bin / sh指向的位置?
有没有办法不运行shell,即使/ bin / sh不是bash?

解决方法

PHP在两种情况下都通过/ bin / sh运行命令,不同之处在于shell,而不是PHP. dash分叉进程运行命令(在本例中为cat)并等待它完成. bash做了一个execve(),所以它用cat替换了自己的进程.

他们似乎已经在以后的版本中修复了它:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=436466

使用bash或最新版本的破折号可以解决您的问题,因为执行的命令获取生成的shell的PID,从而接收信号.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP proc_open bash vs dash全部内容,希望文章能够帮你解决PHP proc_open bash vs dash所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。