打印系统调用的详细信息:strace -fp PID# 降低目标 PID 的速度,记录系统调用,并打印一个总结:strace -cpPID# 降低目标 PID 的速度,并只打印 open() 系统调用:strace -eopen -p PID# 降低目标 PID 的速度,并只打印
1. 通过「c」选项用来汇总各个操作的总耗时,运行后的结果大概如下图所示: strace -cp 1. 很明显,我们能看到 CPU 主要被 clone 操作消耗了,还可以单独跟踪一下 clone: shell> strace -T -e clone -p <PID> 1. 通过「T」选项可以获取操作实际消耗的时间,通过「e」选项可以跟踪某个操作: strace -T -e...
strace -cp 很明显,我们能看到 CPU 主要被 clone 操作消耗了,还可以单独跟踪一下 clone: shell>strace-T-eclone-p<PID> 通过「T」选项可以获取操作实际消耗的时间,通过「e」选项可以跟踪某个操作: strace -T -e clone -p 很明显,一个 clone 操作需要几百毫秒,至于 clone 的含义,参考 man 文档: clone(...
-e trace=<set> : <set> 是系统调用名称(默认是 trace=all ),比如 trace=open,close,read,write -e trace=/<regex>: 可以通过这种方式来用正则表达式指定系统调用名称,支持的正则语法可以参考 regex(7) 。 -e trace=%file: 文件相关系统调用。 -e trace=%desc: 文件描述符相关。 -e trace=%process: ...
-e signal=SET, --signal=SET trace only the specified set of signals print only the signals from SET -e status=SET, --status=SET print only system calls with the return statuses in SET statuses: successful, failed, unfinished, unavailable, detached ...
假设你想专注于特定的系统调用,例如专注于open系统调用,而忽略其余部分。你可以使用-e标志跟上系统调用的名称: [root@sandbox tmp]# strace -e open ls testdir open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3 ...
strace -f -p 924 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048 -f:表示跟踪由被跟踪进程(以及由它创建的子进程)执行的系统调用。这是递归跟踪的选项,包括子进程。-p 1098:指定要跟踪的进程的进程号。在这里,进程号是 1098。-o /tmp/.ssh.log:指定strace 的输出文件路径。这里的输出文件是...
3.设置跟踪选项:`strace -o <file>`。通过指定输出文件,可以将strace的输出写入到文件中。 4.设置跟踪级别:`strace -s <size>`。当系统调用的某个参数是字符串时,最多输出指定长度的内容。默认是32个字节。 5.设置时间格式:`strace -tt`。在每行输出的前面,显示毫秒级别的时间。 6.显示完整的参数值:`str...
假设你想专注于特定的系统调用,例如专注于open系统调用,而忽略其余部分。你可以使用-e标志跟上系统调用的名称: [root@sandbox tmp]# strace -e open ls testdir open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3 ...
1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文件。 3 -e execve 只记录 execve 这类系统调用 ——— 进程无法启动,软件运行速度突然变慢,程序的”SegmentFault”等等都是让每个Unix系统用户头痛的问题, 本文通过三个实际案例演示如何使用truss...