Нужно получить pid
2х или более скриптов, работающих в фоновом режиме. Затем по их pid
они будут закрыты через kill $pid
но вопрос - как их получить зная имя процесса ? Например я использую system('ps aux | grep php');
что бы получить вообще все процессы и вижу примерно такой ответ :
username 676878 100 0.0 296980 14372 ? R 13:04 3:27 /opt/cpanel/ea-php56/root/usr/bin/php/home/username/Business_Logic/testProc.php
username 676943 99.8 0.0 296980 14372 ? R 13:04 3:25 /opt/cpanel/ea-php56/root/usr/bin/php/home/username/Business_Logic/testProc.php
username 693011 1.0 0.0 461388 15888 ? Ss 13:08 0:00 lsphp
username 693146 0.0 0.0 462164 6768 ? Ss 13:08 0:00 lsphp:/home/username/public_html/index.php
username 693147 0.0 0.0 12228 1264 ? S 13:08 0:00 sh -c ps aux | grep php
username 693149 0.0 0.0 8492 696 ? S 13:08 0:00 grep php
Два верхних процесса мне и нужно убить. Однако если дальше ввести :
$proc_str = exec('ps aux | grep /home/username/Business_Logic/testProc');
Я увижу в ответе совершенно другой pid
:
username 729968 0.0 0.0 8492 704 ? S 13:13 0:00 grep /home/username/Business_Logic/testProc
Предпологалось, забить в $proc_str
pid
нужного процесса и убить, но это не приводит к желаемому эфекту - процессы по прежднему работают.
UPD Процесс, который должен быть закончен запускаю несколько раз так :
system('php /home/usernam/Business_Logic/testProc.php > /dev/null 2>&1 &');
Далее, что бы убить :
exec('Killall testProc.php'); // ||
exec('Killall testProc'); // ||
exec('Killall /home/username/Business_Logic/testProc.php');
В итоге процессы продолжают висеть. только exec('kill 568454');
помогло.
UPD_2
exec('pkill -f proc_name');
Эта комманда помогла, убивает все процессы разом proc_name.php
.
Думаю, что Вам пора узнать о командах pkill, которая может убить процесс по имени, killall, которая может убить много процессов по имени или pgrep, который собственно возвращает pid процесса по его имени или pidof (который ищет прямо по имени). В убунте эти команды обычно находятся в пакете procps, в генте - sys-process/procps
В итоге мне помогла следующая команда :
exec('pkill -f proc_name');
При нескольких запущенных экземплярах скрипта proc_name.php
она завершает сразу все.
Виртуальный выделенный сервер (VDS) становится отличным выбором
есть парсер, который лежит в файле parsphp