Получить pid процессов по имени скрипта

157
19 февраля 2019, 13:00

Нужно получить 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.

Answer 1

Думаю, что Вам пора узнать о командах pkill, которая может убить процесс по имени, killall, которая может убить много процессов по имени или pgrep, который собственно возвращает pid процесса по его имени или pidof (который ищет прямо по имени). В убунте эти команды обычно находятся в пакете procps, в генте - sys-process/procps

Answer 2

В итоге мне помогла следующая команда :

exec('pkill -f proc_name');

При нескольких запущенных экземплярах скрипта proc_name.php она завершает сразу все.

READ ALSO
данные из парсера не обновляются без перезагрузки страницы

данные из парсера не обновляются без перезагрузки страницы

есть парсер, который лежит в файле parsphp

173
Вывод объединенных ячеек excel в phpSpreadsheet

Вывод объединенных ячеек excel в phpSpreadsheet

Имеется таблицаВ ней есть объединенные ячейки

214
Отступ в зависимости от времени

Отступ в зависимости от времени

Помогите найти решение:

173