2015-08-06 10 views
10

Soruma göre, bu beklenen (ve neden?) Ve/veya bu davranış başka sistemlerde de görülüyor mu?Perl exec ('/ usr/bin/php -v'), STDIN kapandığında CentOS 6.6'da kilitleniyor

Çevre:

# 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'); 

çalıştırın o ve asılmış PHP sürecini bakın:

# 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 

Ama STDIN kapatırsanız:

Bu iyi çalışır

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

: 10

mini.pl

# 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 

Diğer notlar:

  • Mac OS X (Perl 5.18.2, php bu asılı davranışı yeniden olamaz 5.5.24)

Teşekkürler,

+0

Ben kaynağından PHP derlemek, eğer bu asılı davranışı vs (çalışıyor bulundu 'yum install php' başına. Bu yüzden bu geçici çözümü kullanacağım. –

cevap

1

Sadece Ubuntu 14.04 ve RHEL 6.7'de test ettim ve sorunu yeniden üretemedim.

Sürümün hem yazdırılmasını hem de STDIN'i PHP kodu olarak işlemeye çalışmasına neden olan bir hata olduğundan şüpheleniyorum. Takılıyken, Control-D tuşlarına basmayı veya birkaç satırlık HTML/PHP yazmayı ve ardından girişinizin işlenip işlenmediğini görmek için Control-D tuşlarına basmayı deneyin.

1

Aynı sorunla birlikte bir CentOS'um var, sistem çağrısının sonunda bir ampersan (&) ekleyerek yumuşatabilirsiniz.

Aslında php, aynı sorunu çağırmak için bir python betiği kullanıyorum.

Asıl konu - bilinmeyen, birileri varsa, lütfen bana da bildirin.

Çözüm:

exec("/usr/bin/php -v &"); 
`/usr/bin/php -q ./mini.php &`; 

benim os:

CentOS release 6.4 (Final) 
CentOS release 6.4 (Final) 

[[email protected] perl_tools]$ perl -v 

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi 
[[email protected] perl_tools]$ php -v 
PHP 5.3.3 (cli) (built: Jul 9 2015 17:39:00) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
with Xdebug v2.1.4, Copyright (c) 2002-2012, by Derick Rethans 
[[email protected] perl_tools]$ 

Sayı çoğaltılamaz:

[[email protected] perl_tools]$ perl mini.pl & 
[1] 29744 
[[email protected] perl_tools]$ ps uax|grep php 
gliang 29744 0.1 0.3 341016 8728 pts/0 T 20:27 0:00 /usr/bin/php -v 
gliang 29756 0.0 0.0 103248 812 pts/0 S+ 20:27 0:00 grep php 

[1]+ Stopped     perl mini.pl 
[[email protected] perl_tools]$