目前,我正在通过使用以下命令获取进程列表来采用很长的方法来执行此操作
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/