在实际系统维护过程中,常常需要知道一个进程在做哪些动作,比如想判断一个进程是否hang,我们可以使用strace命令,此命令式用来跟踪一个进程在调用哪些系统函数和信号

通过跟踪xinetd进程演示strace命令:
我们首先找到xinetd进程号,然后使用strace命令attached到xinetd进程,然后再另外一个窗口telnet

[root@limt ~]# ps -ef|grep xinet
root 4314 1 0 10:55 ? 00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root 4657 3612 0 11:02 pts/1 00:00:00 grep xinet
[root@limt ~]# strace -ff -p 4314
Process 4314 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 1
accept(5, {sa_family=AF_INET6, sin6_port=htons(60177), inet_pton(AF_INET6, "::ffff:127.0.0.1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 6
setsockopt(6, SOL_IPV6, IPV6_ADDRFORM, [2], 4) = 0
clone(Process 4422 attached child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f0db3adfa70) = 4422
[pid 4314] sendto(7, "<30>Dec 22 10:57:26 xinetd[4314]"..., 78, MSG_NOSIGNAL, NULL, 0 <unfinished ...>
[pid 4422] rt_sigaction(SIGPIPE, {SIG_DFL, [PIPE], SA_RESTORER|SA_RESTART, 0x7f0db2a9b920}, <unfinished ...>
[pid 4314] <... sendto resumed> ) = 78
[pid 4422] <... rt_sigaction resumed> {SIG_IGN, [], SA_RESTORER, 0x7f0db2a9b920}, 8) = 0
[pid 4314] close(6) = 0
[pid 4314] poll([{fd=5, events=POLLIN}, {fd=3, events=POLLIN}], 2, -1 <unfinished ...>
[pid 4422] rt_sigaction(SIGTSTP, {SIG_DFL, [TSTP], SA_RESTORER|SA_RESTART, 0x7f0db2a9b920}, {SIG_IGN, [], SA_RESTORER, 0x7f0db2a9b920}, 8) = 0
[pid 4422] rt_sigaction(SIGTTIN, {SIG_DFL, [TTIN], SA_RESTORER|SA_RESTART, 0x7f0db2a9b920}, {SIG_IGN, [], SA_RESTORER, 0x7f0db2a9b920}, 8) = 0
[pid 4422] rt_sigaction(SIGTTOU, {SIG_DFL, [TTOU], SA_RESTORER|SA_RESTART, 0x7f0db2a9b920}, {SIG_IGN, [], SA_RESTORER, 0x7f0db2a9b920}, 8) = 0
[pid 4422] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 4422] close(3) = 0
[pid 4422] close(4) = 0
[pid 4422] close(0) = 0
[pid 4422] close(1) = 0
[pid 4422] close(2) = 0
[pid 4422] setgid(0) = 0
[pid 4422] open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 0
[pid 4422] fstat(0, {st_mode=S_IFREG|0644, st_size=3785, ...}) = 0
[pid 4422] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0db3b17000
[pid 4422] read(0, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 3785
[pid 4422] close(0) = 0
[pid 4422] munmap(0x7f0db3b17000, 4096) = 0
[pid 4422] open("/proc/sys/kernel/ngroups_max", O_RDONLY) = 0
[pid 4422] read(0, "65536\n", 31) = 6
[pid 4422] close(0) = 0
[pid 4422] open("/etc/group", O_RDONLY|O_CLOEXEC) = 0
[pid 4422] fstat(0, {st_mode=S_IFREG|0644, st_size=1411, ...}) = 0
[pid 4422] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0db3b17000
[pid 4422] lseek(0, 0, SEEK_CUR) = 0
[pid 4422] read(0, "root:x:0:\nbin:x:1:bin,daemon\ndae"..., 4096) = 1411
[pid 4422] read(0, "", 4096) = 0
[pid 4422] close(0) = 0

从上面的输出可以看出4314进程先accept一个socket请求,然后cloned一个子进程4422,然后父进程close刚创建的socket文件描述6,子进程关闭继承过来的文件描述符0,1,2,3,4,,然后子进程读取/etc/passwd文件,为telnet登陆用户验证做准备

在生产系统中就曾经遇到一个问题,最后通过strace命令解决,情况大致为:
有一个批处理作业运行了10几个小时都没有结束,一般情况下几分钟就完成,由于本身对这套系统也不是太熟悉,就先登录系统,查看跑批处理作业用户在运行哪些进程(ps -ef|grep user),发现此用户运行着一个shell脚步,和运行着一个gzip程序,并且gzip程序的父进程为shell脚步的进程,说明shell脚步调用了gzip,那gzip为什么卡着不动啊,查看了那个要压缩的文件也不是很大。然后通过strace文件查看那个gzip进程,发现一直处于read函数状态不动,然后恍然大悟,是不是在等待Y/N输入,立刻去那个文件目录,发现目录下已经有了那个文件的gz文件,所以需要确认是否覆盖,因为是系统自动调起的程序,所以一直卡在后台,至于那个早先生成的gz文件,是因为之前系统上线造成的。

strace命令跟踪进程的更多相关文章

  1. strace 分析 跟踪 进程错误

    strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进程状态变更等. ...

  2. 使用 Linux 的 strace 命令跟踪/调试程序的常用选项

    原文:http://linoxide.com/linux-command/linux-strace-command-examples/作者: Raghu 在调试的时候,strace能帮助你追踪到一个程 ...

  3. 使用strace命令跟踪系统调用

    一.是什么strace? strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由 ...

  4. 9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数

    strace 是Linux环境下的一款程序调试工具,用于检查一个应用程序所使用的系统调用以及它所接收的系统信息.strace会追踪程序运行时的整个生命周期,输出每一个系统调用的名字.参数.返回值和执行 ...

  5. [strace]跟踪进程的系统调用

    转自:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号 ...

  6. inux跟踪线程的方法:LWP和strace命令

    摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...

  7. linux跟踪线程的方法:LWP和strace命令

    摘要:在使用多线程程序时,有时会遇到程序功能异常的情况,而这种异常情况并不是每次都发生,很难模拟出来.这时就需要运用在程序运行时跟踪线程的手段,而linux系统的LWP和strace命令正是这种技术手 ...

  8. 28、应用调试之strace命令来跟踪系统调用

    strace是个工具,在使用时需要先按照,见韦东山书籍: 1.tar xjf starce-4.5.15.tar.bz2 2.cd strace-4.5.15/ 3.patch -p1 < .. ...

  9. Linux strace命令

    简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...

随机推荐

  1. 【转载】Pyqt 添加右键菜单方法

    转载地址: http://www.cnblogs.com/yogalau/p/3954042.html?utm_source=tuicool QListWidget 是继承 QWidget 的, 所以 ...

  2. blender源代码编译

    blender源码路径(svn):https://svn.blender.org/svnroot/bf-blender/trunk/blender/ 依赖外部Lib(svn):https://svn. ...

  3. h5 range应用 透明度+RGB

    透明度 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. 快速熟悉python 下使用mysql(MySQLdb)

    首先你需要安装上mysql和MySQLdb模块(当然还有其他模块可以用),这里我就略过了,如果遇到问题自行百度(或者评论在下面我可以帮忙看看) 这里简单记录一下自己使用的学习过程: 一.连接数据库 M ...

  5. 19条ANDROID平台设计规范(转)

    1.尺寸以及分辨率: Android的界面尺寸比较流行的有:480*800.720*1280.1080*1920,我们在做设计图的 时候建议是以 480*800的尺寸为标准; 2.界面基本组成元素: ...

  6. 用C获得当前系统时间(转)

    #include <stdio.h> #include <time.h> void main () { time_t rawtime; struct tm * timeinfo ...

  7. 在Salesforce中创建Schedule的Job去定时触发对应的Class

    在Salesforce中也存在着Job的概念,当然了我们可以创建Schedule的Job去定时触发对应的Class,来完成我们所需要定时处理的功能,比如:定时同步数据. 具体处理步骤如下所示: 1): ...

  8. POJ 1741 Tree 树分治

    Tree     Description Give a tree with n vertices,each edge has a length(positive integer less than 1 ...

  9. LoadRunner 脚本学习 -- 随机函数运用

    直接上码 Action() { int randnum; randnum = rand()%+; lr_output_message("随机得到的数是:%d", randnum); ...

  10. Understanding, Operating and Monitoring Apache Kafka

    Apache Kafka is an attractive service because it's conceptually simple and powerful. It's easy to un ...