2017-01-05 3 views
0

Я пытаюсь сделать что-то, что немного рискованно. Его частный скрипт, но я хочу добавить некоторую безопасность, поэтому я не случайно вношу недопустимый PID.Получить имя программы для PID, используя PHP

В настоящее время, если скрипт зависает, он заблокирует порт, который он использует, мне нужно убить PID, а затем перезапустить его. Я хочу добавить новый аргумент в этот скрипт, чтобы я мог перейти в старый PID, и скрипт будет убивать этот PID перед тем, как начать снова. Используя netstat -tulpen, я вижу, что есть имя программы, привязанное к PID. Я хочу убедиться, что имя программы - PHP, поэтому я случайно не отключу другой процесс. Например. Проверьте, что PID 15498 был создан PHP (15498/PHP)

tcp  0  0 0.0.0.0:1067   0.0.0.0:*    LISTEN  0   201425  15498/php 

Я имел взгляд на файловую систему и я нашел каталог для PID, но все файлы в этом каталоге являются пустыми. /proc/15498

Как только я могу проверить, что это относительно безопасный PID, чтобы убить, я могу запустить команду, чтобы убить его.

exec("kill -SIGKILL 15498"); 
+0

Вы пытались прочитать '/ proc/15498/cmdline'? – Barmar

+1

Игнорируйте тот факт, что 'ls' говорит, что файлы имеют нулевую длину. Это не настоящие файлы, когда вы читаете их, они извлекают информацию из ядра. – Barmar

+0

А это еще лучше, это говорит мне, что сценарий php тоже возник из-за этого. Это будет отлично. Есть ли безопасный способ проанализировать эти данные? Кажется, что оно ограничено чем-то, что появляется как «NUL», когда я смотрю его в блокноте ++. –

ответ

2

Получить командную строку из /proc/PID/cmdline и удалите конечный нулевой байт.

$cmd = trim(file_get_contents("/proc/$pid/cmdline"), "\0"); 
-1

Вы можете использовать системный вызов PHP и передать ему команду оболочки для просмотра информации о процессе, который затем вы можете направить через Grep с PID, чтобы искать имя процесса