Linux 命令输出每个新进程的 PID

Linux 命令输出每个新进程的 PID

是否有一个 Linux 命令可以监视新进程?

我的目标是查看何时gulp调用新命令,使用类似的方法执行命令行ps,然后使用 对其进行过滤sed

重要的部分是监视新进程,因为一旦完成我就无法查找 PID。

答案1

您可以使用auditd子系统记录系统上运行的命令。它挂接到内核,因此记录所有执行的操作非常可靠。

我的示例是在 Fedora Linux 上,您可能会发现根据您的发行版略有不同。(子系统auditd相当复杂,因此要做到这一点可能有点棘手。)

首先检查您是否已安装并正在运行 auditd,使用以下命令:

$ 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,并得到你想要的信息!

相关内容