linux - strace整个操作系统同时获取所有进程的strace日志

标签 linux process operating-system strace

目前,我正在通过使用以下命令获取进程列表来采用很长的方法来执行此操作

sudo ps -eo pid,command | grep -v grep | awk '{print $1}' > pids.txt

然后遍历进程 ID 并在后台执行每个进程的 strace 并为每个进程生成日志,进程 ID 在日志的扩展名中

filename="$1"
while read -r line
do
chmod +x straceProgram.sh
./straceProgram.sh $line &
done < "$filename"

straceProgram.sh

pid="$1"
sudo strace -p $pid -o log.$pid

但是,这种方法的问题是,如果有任何新进程启动,它将不会被跟踪,因为跟踪是在第一次运行期间存储在 pids.txt 中的进程 ID 上。 pids.txt 的列表可以用新的进程 ID 更新,但是,我对在操作系统级别运行 strace 感到好奇,这将跟踪所有正在执行的事件。 有没有更好的方法来做到这一点?

最佳答案

如果生成的文件系统将成为内核文件系统驱动程序,我建议使用 tracefs收集您需要的信息。我建议不要将其作为内核文件系统,除非您有大量时间和大量测试资源。这不是微不足道的。

如果您想要一个更简单、更安全的替代方案,请使用 fuse 编写您的文件系统.缺点是性能不太好,有几个地方不能用,但通常是可以接受的。请注意,在 fuse 下已经有一个日志文件系统的实现。

关于linux - strace整个操作系统同时获取所有进程的strace日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112732/

相关文章:

groovy - 终止使用 Groovyexecute() 启动的进程

linux - 设置与任务集 nt work 的亲和性

bash - 从顶部输出中删除标题

java - 使用迭代器删除并插入 LinkedHashMap?

linux - 将最近更改的文件从一台(开发)服务器推送到远程(实时)服务器的脚本?

c - __FILE__ 显示带有文件名的整个路径

c - 为什么我的 wc 实现给出了错误的字数?

c - Linux C转储进程内存区域和搜索字符串问题

operating-system - ThreadX 的哪些方面使其成为实时操作系统?

operating-system - 在 Solaris 上查看内存使用情况的综合方法