2015-08-06 24 views
10

La mia domanda è, è questo previsto (e perché?) E/o questo comportamento è visto anche su altri sistemi?Perl exec ('/ usr/bin/php -v') si blocca su CentOS 6.6 a meno che STDIN non sia chiuso prima

Ambiente:

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

Esegui e vedere il processo di PHP Hung:

# 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 

Ma se chiudo STDIN:

mini.pl:

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

funziona benissimo:

# 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 

Altre note:

  • non riesco a riprodurre questo comportamento appeso su Mac OS X (Perl 5.18.2, php 5.5.24)

Grazie,

+0

ho scoperto che se compilo PHP dai sorgenti, funziona benissimo (vs questo comportamento impiccagione per 'yum install php'). Quindi userò questa soluzione alternativa. –

risposta

1

L'ho appena testato su Ubuntu 14.04 e RHEL 6.7 e non ho potuto riprodurre il problema.

Sospetto che ci sia un bug che sta causando sia la stampa della versione che il tentativo di elaborare STDIN come codice PHP. Mentre è sospeso, prova a premere Control-D, o digita alcune righe di HTML/PHP e poi premi Control-D per vedere se il tuo input viene elaborato.

1

Ho un CentOS con lo stesso problema, risolto aggiungendo una e commerciale (&) alla fine della chiamata di sistema mentre si può mantenere yum.

In realtà uso uno script python per chiamare il php, lo stesso problema.

Il vero problema - sconosciuto, se qualcuno ha qualche idea, per favore fatemelo sapere pure.

Soluzione:

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

il mio sistema operativo:

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]$ 

Problema duplicato:

[[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]$