在Linux下,是否有可能实时监控所有系统调用?

3
例如,在linux机器上有很多进程。每个进程都可以使用系统调用,但通常只有少数被使用。那么,有没有一种工具或方法可以显示何时使用了系统调用以及与之关联的进程?

http://en.wikipedia.org/wiki/Ptrace - Karoly Horvath
ptrace() 是一个系统调用,而不是一个工具。 - favoretti
我不知道如何跟踪所有进程(系统范围内)的svc,但是“strace”是我追踪特定进程的最爱工具。 - Kenji Noguchi
@favoretti:是的。如果您点击链接,您会看到这是第一句话。 - Karoly Horvath
2个回答

6

您可以使用各种工具,如straceltrace等,但我不确定您是否想同时跟踪所有进程。

通常,您会附加到一个感兴趣的进程并跟随其系统调用。


好的,我可以使用strace来追踪一个进程。 那么如果用户正在创建一个新文件,我能用这种方法看到与他的创建相关的系统调用吗? - user840718
1
不是用户,而是一个“进程”真正创建了那个文件。如果您连接到“该”进程,那么是的...如果您只想监视FS,则有其他工具可用。 - Karoly Horvath
是的,我的目标是以实时模式监控特定文件系统,而不是进程。 因此,我考虑使用系统调用,因为它们是内核运行的基本指令。 - user840718
1
然后你可以使用lnotify,或者一些更高级的东西,比如Splunk FS变化监视器(http://docs.splunk.com/Documentation/Splunk/latest/Data/Monitorchangestoyourfilesystem):) - favoretti
@user840718 那你应该使用systemtap和oprofile,这两个工具可以跟踪和分析整个系统,而不仅仅像strace一样只能跟踪一个进程。 - nos

2

您可以使用Linux内核审计子系统。

例如,要查看由名为sshd(pid - 12345)的程序执行的所有系统调用:

# auditctl -a entry,always -S all -F pid=12345

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接