linux — перечисление всех запущенных процессов на сервере с использованием переполнения стека

Я пытаюсь получить список всех процессов, запущенных в настоящее время на моем сервере Ubuntu, используя PHP, В идеале я хотел бы получить следующую информацию:

  • Идентификатор процесса
  • Команда, используемая для выполнения процесса
  • Аргументы, данные процессу

Я знаю, что я могу использовать exec звонить ps перечислить текущие запущенные процессы.

exec('ps aux', $output);

Однако выходные данные отформатированы с произвольным количеством пробелов, поэтому их разбор не самая простая вещь в мире.

Я мог бы потенциально использовать explode или же preg_split разобрать, но Есть ли более простой способ получить список всех запущенных процессов, используя phpвместе с идентификатором процесса, командой и аргументами?

4

Решение

Я не вижу ничего проще, чем ps с правильными аргументами, например:ahxwwo pid,command которая дает только ту информацию, которую вы хотите, например:

5911 tail -F /var/log/mail.log

Если вам нужны необработанные данные, вы можете прочитать каждый файл в /proc/[123456789]*/cmdline, Например,

$ cat -vet /proc/5911/cmdline
tail^@-F^@/var/log/mail.log^@

где аргументы команды разделены нулевым символом.

1

Другие решения

Большая часть кредита идет на meuh.


ps ahxwwo pid,command

Дает мне три элемента, которые мне нужны, но все еще довольно сложно разобрать из-за произвольного форматирования пространства.

Тем не менее, можно удалить форматирование пространства.

ps ahxwwo pid:1,command:1

С помощью explode с пробелом в качестве разделителя теперь гарантирует, что индекс 0 — это pid, а индекс 1 — это команда, а остальные индексы являются аргументами.

1

По вопросам рекламы [email protected]