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

use*_*259 4 linux operating-system process strace

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

sudo ps -eo pid,command | grep -v grep | awk '{print $1}' > pids.txt
Run Code Online (Sandbox Code Playgroud)

然后迭代进程 id 并在后台执行每个进程的 strace,并为每个进程生成日志,并在日志扩展名中包含进程 id

filename="$1"
while read -r line
do
chmod +x straceProgram.sh
./straceProgram.sh $line &
done < "$filename"
Run Code Online (Sandbox Code Playgroud)

straceProgram.sh

pid="$1"
sudo strace -p $pid -o log.$pid
Run Code Online (Sandbox Code Playgroud)

然而,这种方法的问题是,如果有任何新进程启动,则不会对其进行 strace,因为 strace 位于第一次运行期间存储在 pids.txt 中的进程 ID 上。pids.txt 列表可以使用新的进程 ID 进行更新,但是,我对在操作系统级别运行 strace 感到好奇,该 strace 将跟踪所有正在执行的活动。有更好的方法吗?

Dar*_*con 5

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

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