strace命令

简介

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

输出参数含义

strace的两种运行模式

1、直接追踪某些命令的执行

语法

strace <待追踪的命令>

例如

[root@iZzm446eh1ux98Z ~]# strace ls /

2、追踪某个守护进程

语法

strace -p pid

 strace常用选项

从实例中看:

strace -tt -T -v -f -e trace=file -o /data/log/strace.log -s 1024 -p 23489
-tt  在每行输出的前面,显示毫秒级别的时间
-T   显示每次系统调用所花费的时间
-v   对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
-f   跟踪目标进程,以及目标进程创建的所有子进程
-e   控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
-o   把strace的输出单独写到指定的文件
-s   当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
-p   指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。

strace的-e trace选项

要跟踪某个具体的系统调用,-e trace=xxx即可。但有时候我们要跟踪一类系统调用,比如所有和文件名有关的调用、所有和内存分配有关的调用。strace提供了几类常用的系统调用组合名字。

-e trace=file     跟踪和文件访问相关的调用(参数中有文件名)
-e trace=process  和进程管理相关的调用,比如fork/exec/exit_group
-e trace=network  和网络通信相关的调用,比如socket/sendto/connect
-e trace=signal    信号发送和处理相关,比如kill/sigaction
-e trace=desc  和文件描述符相关,比如write/read/select/epoll等
-e trace=ipc 进程见同学相关,比如shmget等


参考:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

原文地址:https://www.cnblogs.com/uestc2007/p/15164396.html