微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl exec(‘/usr/bin/php -v’)挂在CentOS 6.6上,除非STDIN先关闭

我的问题是,这是预期的(为什么?)和/或这种行为在其他系统上看到吗?

环境:

# cat /etc/*-release
CentOS release 6.6 (Final)
...
# perl -v 

This is perl,v5.10.1 (*) built for x86_64-linux-thread-multi
...
# PHP -v
PHP 5.4.41 (cli) (built: May 14 2015 23:15:28) 
...

mini.pl:

#!/usr/bin/perl
exec('/usr/bin/PHP -v');

运行它并查看挂起的PHP进程:

# perl mini.pl &
[2] 16958
[1]   Killed                  perl mini.pl
# ps ax | grep 16958
16958 pts/2    T      0:00 /usr/bin/PHP -v
16960 pts/2    S+     0:00 grep 16958

[2]+  Stopped                 perl mini.pl

但是如果我关闭STDIN:

mini.pl:

#!/usr/bin/perl
close(STDIN);
exec('/usr/bin/PHP -v');

运行正常

# perl mini.pl &
[1] 16976
# PHP 5.4.41 (cli) (built: May 14 2015 23:15:28) 
...

[1]+  Done                    perl mini.pl
# ps ax | grep 16976
16978 pts/2    S+     0:00 grep 16976

其他注意事项

>我无法在Mac OS X上重现这种挂起的行为(perl 5.18.2,PHP 5.5.24)

谢谢,

解决方法

我刚刚在Ubuntu 14.04和RHEL 6.7上进行了测试,无法重现此问题.

我怀疑有一个错误,导致它打印版本,并尝试处理STDIN作为PHP代码.挂起时,尝试按Control-D,或者输入几行HTML / PHP,然后按Control-D查看输入是否被处理.

原文地址:https://www.jb51.cc/Perl/171468.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐