Câu hỏi của tôi là, điều này được mong đợi (và tại sao?) Và/hoặc hành vi này có được thấy trên các hệ thống khác không?Perl exec ('/ usr/bin/php -v') treo trên CentOS 6.6 trừ khi STDIN được đóng trước tiên
Môi trường:
# 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');
Chạy nó và xem quy trình PHP treo:
# 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
Nhưng nếu tôi đóng STDIN:
mini.pl:
#!/usr/bin/perl
close(STDIN);
exec('/usr/bin/php -v');
Nó chạy tốt:
# 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
ghi chú khác:
- tôi không thể tái tạo hành vi treo này trên Mac OS X (perl 5.18.2, php 5.5.24)
Cảm ơn,
Tôi thấy rằng nếu tôi biên dịch PHP từ mã nguồn, nó hoạt động tốt (so với hành vi treo này mỗi 'yum install php'). Vì vậy, tôi sẽ sử dụng cách giải quyết đó. –