是否有一个 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
,并得到你想要的信息!