strace 是一个强大的 Linux 命令行工具,用于跟踪系统调用和信号。它可以用来诊断问题、调试程序或了解程序与操作系统之间的交互。以下是如何使用 strace 跟踪进程的步骤:
在大多数 Linux 发行版中,strace 已经预装。如果没有,可以使用包管理器进行安装。例如,在基于 Debian 的系统上,可以使用以下命令安装:
sudo apt-get update
sudo apt-get install strace
跟踪一个正在运行的进程
使用 -p 选项指定要跟踪的进程 ID(PID):
strace -p <PID>
跟踪一个新启动的进程
在启动进程时,将 strace 命令作为命令的前缀:
strace <command>
例如,要跟踪 ls 命令的执行,可以运行:
strace ls
跟踪多个进程
使用 -p 选项多次,或者使用 -e trace=pid 选项来跟踪特定 PID 的所有子进程:
strace -p <PID1> -p <PID2>
或者
strace -e trace=pid <command>
跟踪特定的系统调用
使用 -e trace=<syscall> 选项来跟踪特定的系统调用。例如,要跟踪 read 和 write 系统调用,可以运行:
strace -e trace=read,write <command>
输出到文件
使用 -o 选项将输出重定向到文件:
strace -o output.txt <command>
实时查看输出
使用 -s 选项设置输出字符串的最大长度,以便完整显示。默认情况下,strace 会截断较长的字符串。例如,设置最大长度为 1000 字节:
strace -s 1000 <command>
附加到已停止的进程
如果进程已经停止,可以使用 -p 选项附加到该进程,并使用 SIGCONT 信号使其继续执行:
strace -p <PID> -s 1000 -e trace=all -o output.txt
kill -CONT <PID>
-e 选项可以组合多个系统调用进行跟踪,也可以使用 -e exclude= 选项排除某些系统调用。-e trace=file 选项可以跟踪所有文件描述符的操作。-e trace=network 选项可以跟踪所有网络相关的系统调用。strace 可能会对性能产生影响,特别是在跟踪大量进程或高频率的系统调用时。-s 选项设置合适的字符串长度,并考虑将输出重定向到文件。strace 时要格外小心,因为它可能会干扰正常的服务运行。通过这些基本和高级用法,你可以有效地使用 strace 来跟踪和分析进程的行为。