我想看看自上次重新启动以来,在我的系统中哪个程序获得 PID 的频率最高,其次是频率。如果我top
现在运行,我可以看到PID
列和COMMAND
列,但只能看到当前的系统状态。我想从一些日志中挖掘或启用一些日志,因此每当某些东西有了新的东西时PID
,COMMAND
我想向表中添加一行,并分析该表。例如:
1 root 20 0 168424 10960 7820 S 0.0 0.1 0:02.78 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 0:02.26 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 0:31.57 rcu_sched
您可以看到有几个PID
s 已经退出(如 5、7、8)。一旦他们开始,我想把它们全部记录下来。有没有命令或实用程序可以执行此操作?
答案1
这是一个本机解决方案auditd
,它使用 Linux 内核中内置的审核功能。
auditctl -a always,task # the one below should also work; pick one
auditctl -a always,exit -F arch=b64 -S clone,fork,vfork,execve
systemctl restart auditd
# wait a while and use your computer
或者,写入audit
的配置文件,启用服务并重新启动
echo "-a always,task" > /etc/audit/rules.d/logpid.rules
echo "-a always,exit -F arch=b64 -S clone,fork,vfork,execve" > /etc/audit/rules.d/logpid.rules
systemctl enable auditd
systemctl start auditd
reboot
然后重启后,使用一段时间,查看审计报告:
aureport --start today --interpret --executable --summary # sort by execs the number of audit events
aureport --start today --interpret --syscall --summary