У меня есть файл сценария php test1.php
<?php
echo "hello\n"
?>
Когда я пытаюсь запустить php
через командную строку, используя следующий код, останавливается только один запуск процесса php и другой процесс php.
Мы можем видеть только одно hello
.
Почему другой процесс остановлен?
[root@home usr]# php -f test1.php & php -f test1.php
[30] 20817
hello
[root@home usr]#
[30]+ Stopped php -f test1.php
PS:
PHP 5.4.16 (cli) (built: Jun 23 2015 21:17:27)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Скрипты выполняются параллельно.
Попробуйте эту модифицированную версию тестового скрипта:
<?php
// Read first command line argument
$delay = (int) $argv[1];
// Wait for $delay seconds
sleep($delay);
// Output some message
echo "Result after $delay seconds\n";
Если вы php hello.php 3 & php hello.php 1
этот скрипт через php hello.php 3 & php hello.php 1
вы увидите, что первый вызов будет выполняться в течение 3 секунд и распечатать некоторый вывод, в то время как второй вызов будет работать только в течение 1 секунды и распечатать некоторый вывод до первого вывод вызовов:
root@httpserver:/tmp# php hello.php 3 & php hello.php 1
[1] 15991
Result after 1 seconds
root@httpserver:/tmp# Result after 3 seconds
Если вы ищете другие способы параллельного выполнения сценария, вы должны взглянуть на эту статью https://d-mueller.de/blog/parallel-processing-in-php/
&
после команды в командной строке переводит ее в фоновый режим. Итак, первая команда, вероятно, завершила работу в фоновом режиме, и поэтому вы не видите вывод.