У меня вопрос: это ожидаемо (и почему?) И / или такое поведение наблюдается и в других системах?
Среда:
# 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
Другие заметки:
Спасибо,
Я только что проверил это на Ubuntu 14.04 и RHEL 6.7, и не смог воспроизвести проблему.
Я подозреваю, что есть ошибка, которая заставляет его печатать версию и пытаться обработать STDIN как код PHP. Пока он зависает, попробуйте нажать Control-D или набрать несколько строк HTML / PHP, а затем нажать Control-D, чтобы увидеть, обрабатывается ли ваш ввод.
У меня есть CentOS с той же проблемой, решена путем добавления амперсанда (&) в конце системного вызова, пока вы можете сохранить ням.
Я на самом деле использую скрипт Python для вызова php, та же проблема.
Реальная проблема — неизвестно, если у кого-то есть идея, пожалуйста, дайте мне знать.
Решение:
exec("/usr/bin/php -v &");
`/usr/bin/php -q ./mini.php &`;
мой ос:
CentOS release 6.4 (Final)
CentOS release 6.4 (Final)
[gliang@www perl_tools]$ perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
[gliang@www 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
[gliang@www perl_tools]$
Выпуск дублирован:
[gliang@www perl_tools]$ perl mini.pl &
[1] 29744
[gliang@www 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
[gliang@www perl_tools]$