视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
linux strace命令
2021-11-05 14:09:55 责编:李赢赢
文档


linux系统下strace命令是什么呢?下面是strace命令具体介绍:

1、strace命令简介:

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

2、输出参数含义:

root@ubuntu:/usr# strace cat /dev/null 

execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0

brk(0)                                  = 0xab1000

access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)

mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

...

brk(0) = 0xab1000

brk(0xad2000) = 0xad2000

fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0

open("/dev/null", O_RDONLY) = 3

fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0

read(3, "", 32768) = 0

close(3) = 0

close(1) = 0

close(2) = 0

exit_group(0) = ?

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。

3、strace命令参数:

-c 统计每一系统调用的所执行的时间,次数和出错的次数等. 

-d 输出strace关于标准错误的调试信息. 

-f 跟踪由fork调用所产生的子进程. 

-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. 

-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪. 

-h 输出简要的帮助信息. 

-i 输出系统调用的入口指针. 

-q 禁止输出关于脱离的消息. 

-r 打印出相对时间关于,,每一个系统调用. 

-t 在输出中的每一行前加上时间信息. 

-tt 在输出中的每一行前加上时间信息,微秒级. 

-ttt 微秒级输出,以秒了表示时间. 

-T 显示每一调用所耗的时间. 

-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. 

-V 输出strace的版本信息. 

-x 以十六进制形式输出非标准字符串 

-xx 所有字符串以十六进制形式输出. 

-a column 

设置返回值的输出位置.默认 为40. 

-e expr 

指定一个表达式,用来控制如何跟踪.格式如下: 

[qualifier=][!]value1[,value2]... 

qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如: 

-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 

注意有些shell使用!来执行历史记录里的命令,所以要使用\\. 

-e trace=set 

只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. 

-e trace=file 

只跟踪有关文件操作的系统调用. 

-e trace=process 

只跟踪有关进程控制的系统调用. 

-e trace=network 

跟踪与网络有关的所有系统调用. 

-e strace=signal 

跟踪所有与系统信号有关的 系统调用 

-e trace=ipc 

跟踪所有与进程通讯有关的系统调用 

-e abbrev=set 

设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. 

-e raw=set 

将指 定的系统调用的参数以十六进制显示. 

-e signal=set 

指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. 

-e read=set 

输出从指定文件中读出 的数据.例如: 

-e read=3,5 

-e write=set 

输出写入到指定文件中的数据. 

-o filename 

将strace的输出写入文件filename 

-p pid 

跟踪指定的进程pid. 

-s strsize 

指定输出的字符串的最大长度.默认为32.文件名一直全部输出. 

-u username 

以username 的UID和GID执行被跟踪的命令

以上就是小编今天的分享了,希望可以帮助到大家。

下载本文
显示全文
专题linux安装命令专题linux sh命令专题linux sudo专题Linux更新专题linux内核升级命令专题linux命令大全专题linux基本命令大全专题linux常用命令专题linux install命令专题Linux运行sh专题linux基本命令的使用专题linux shell命令专题linux版本查看命令专题linux tar命令专题linux zip命令安装专题linux rpm命令专题linux free命令专题linux系统命令专题linux常用命令详解专题linux命令窗口专题