strace命令
strace是个功能强大的Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用(system call)和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。
在Linux系统中,用户程序运行在一个沙箱(sandbox)里,用户进程不能直接访问计算机硬件设备。当进程需要访问硬件设备(如读取磁盘文件或接收网络数据等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可跟踪进程产生的系统调用,包括参数、返回值和执行所消耗的时间。若strace没有任何输出,并不代表此时进程发生阻塞;也可能程序进程正在自己的沙箱里执行某些不需要与系统其它部分发生通信的事情。strace从内核接收信息,且无需以任何特殊方式来构建内核。
- strace命令格式如下:
strace [-dffhiqrtttTvVxx] [-a column] [-e expr] [-o file] [-p pid] [-s strsize] [-u username] [-E var=val] [command [arg ...]]
或
strace -c [-e expr] [-O overhead] [-S sortby] [-E var=val] [command [arg ...]]
通过不同的选项开关,strace提供非常丰富的跟踪功能。最简单的应用是,跟踪可执行程序运行时的整个生命周期,将所调用的系统调用的名称、参数和返回值输出到标准错误输出stderr(即屏幕)或-o选项所指定的文件。注意,命令(command)必须位于选项列表之后。
啥也没有
如果我们用 strace 跟踪一个进程,输出结果很少,是不是说明进程很空闲?其实试试 ltrace,可能会发现别有洞天。记住有内核态和用户态之分。
我第一开始执行strace -fF -o b.txt -e trace=accpet ./spider
啥也没有,以为是上边的原因,结果其实是因为你的代码里没有accept相关的调用,所以肯定没有了啊,那我不写的话就相当于记录所有的东西。
命令说明
https://www.cnblogs.com/clover-toeic/p/3738156.html
惊群问题
https://blog.csdn.net/dog250/article/details/80837278
1 | #include <stdlib.h> |
参考
https://www.cnblogs.com/clover-toeic/p/3738156.html
https://huoding.com/2015/10/16/474