Не выходит из цикла do while, который содержит exec () - PullRequest
1 голос
/ 11 декабря 2010

У меня есть скрипт php, который запускает три команды exec () и получает их соответствующие pids.

Я бы хотел дождаться остановки всех трех команд exec, прежде чем перейти к следующему пакету из трех.

Я пытался проверить каждый pid в цикле do while, но, похоже, он никогда не выходит из цикла: он просто сидит там, пока не истечет время ожидания сценария.

Вот упрощенная версия того, что я пробовал:

do {
 $pid = 722;
 print "checking";
 exec("ps -p $pid", $output);
 $count = count($output);
} while ( $count >= 2 );

print "out of do while";

У кого-нибудь есть идеи о том, что может привести к тому, что оно никогда не выйдет из цикла?

Ответы [ 2 ]

5 голосов
/ 11 декабря 2010

PHPs exec просто продолжает добавляться в массив, поэтому количество будет только увеличиваться. Для перезаписи выходного массива вызовите unset($output) перед вызовом exec.

Подробнее см. В php руководстве по exec .

0 голосов
/ 11 декабря 2010

Если присутствует выходной аргумент, то указанный массив будет заполняться каждой строкой выходных данных команды.Конечные пробелы, такие как \ n, не включены в этот массив. Обратите внимание, что если массив уже содержит некоторые элементы, exec () добавится в конец массива .Если вы не хотите, чтобы функция добавляла элементы, вызовите unset () для массива перед передачей его в exec ().

From exec() manual .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...