Подтвердить что ты не робот

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)

Спасибо,

4b9b3361

Ответ 1

Я просто протестировал это на Ubuntu 14.04 и RHEL 6.7 и не смог воспроизвести проблему.

Я подозреваю, что есть ошибка, которая заставляет его как печатать версию, так и пытаться обрабатывать STDIN в качестве кода PHP. Пока он висит, попробуйте нажать Control-D или введите несколько строк HTML/PHP, а затем нажмите Control-D, чтобы увидеть, обрабатывается ли ваш вход.

Ответ 2

У меня есть CentOS с той же проблемой, разрешенная добавлением амперсанда (&) в конце системного вызова, в то время как вы можете сохранить yum.

Я действительно использую python script для вызова php, той же проблемы.

Реальная проблема - неизвестно, если у кого-то есть какая-то идея, пожалуйста, дайте мне знать.

Решение:

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

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

Проблема дублируется:

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