Команда Linux для вывода каждого нового процесса PID

370
Sarke

Есть ли команда Linux, которая будет следить за новыми процессами?

Моя цель в этом заключается в том, чтобы я хотел увидеть, когда gulpвызывается новая команда, выполнить командную строку с чем-то вроде ps, а затем отфильтровать ее с помощью sed.

Важной частью является отслеживание новых процессов, так как я не могу посмотреть PID, как только он закончен.

2

1 ответ на вопрос

4
Filipe Brandenburger

Вы можете использовать auditdподсистему для регистрации команд, выполняемых в вашей системе. Он подключен к ядру, поэтому очень надежно регистрировать все, что выполняется.

Мои примеры на Fedora Linux, вы можете найти небольшие различия в зависимости от вашего дистрибутива. ( auditdПодсистема довольно сложная, поэтому может быть сложно сделать это правильно.)

Сначала убедитесь, что у вас уже установлен и запущен Audit, с помощью:

$ systemctl status auditd.service 

Затем вы можете проверить, какие правила загружены. По умолчанию в Fedora вы получаете:

$ sudo auditctl -l -a never,task 

Поэтому нам нужно удалить этот список «задач» (который подавляет системные вызовы) и добавить тот, который регистрирует «execve» (который является системным вызовом, выполняющим команды).

$ sudo auditctl -d never,task $ sudo auditctl -a always,exit -F arch=b64 -S execve 

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

Затем вы можете найти его, используя ausearchкоманду. Например, чтобы найти все исполнения, которые вызывают «gulp», вы можете использовать:

$ sudo ausearch -c gulp 

Вывод будет довольно многословным ... Сфокусируйтесь на строке type = EXECVE. Аргументы будут перечислены какa0="gulp" a1="first_argument" a2="second_argument" ...

Если вместо строки в кавычках вы получите длинную последовательность чисел, используйте -iдля ее интерпретации.

Регистрация каждой команды, которая выполняется в вашей системе, может быть очень дорогой и занимать много места на диске! Возможно, это тоже влияет на производительность. Если вы хотите отменить эти изменения, вы можете перезагрузить набор правил по умолчанию с помощью этой команды:

$ sudo augenrules --load 

Вы также можете применить фильтр к правилу ведения журнала, например, только для регистрации выполнения / usr / bin / gulp:

$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve 

Так что, может быть, это излишне ... Но это так же надежно, как и получается. Я надеюсь, что вы можете найти свой путь через auditdподсистему, и она даст вам информацию, которую вы ищете!

Похожие вопросы