Linux中的strace

strace工作原理及其知识点其延伸

1.strace命令介绍

strace是Linux下一个非常实用的系统调用跟踪工具。它可以跟踪一个进程执行的所有系统调用,并输出它们的参数、返回值等详细信息。

使用strace命令可以深入了解一个程序的运行过程,包括程序对文件、网络、进程、信号等系统资源的操作。strace所跟踪的系统调用包括了所有标准C库函数和Linux系统调用。这些系统调用是构成Linux操作系统的基础,通过了解它们的使用情况,可以更好地理解程序的行为。

  1. strace命令的安装

yum install starace

  1. strace命令的使用

strace的使用方法非常简单,只需要在命令行中输入"strace"命令以及需要跟踪的程序的命令即可。例如:

strace  ls -l

上述命令将会跟踪"ls -l"命令的运行过程,并输出所有的系统调用信息。

 通过strace的输出,可以清楚地看到程序的调用过程,包括入参、返回值、错误码等。这对于排查程序的bug和优化程序的性能都非常有用。同时,对于分析程序的安全性和漏洞也有很大帮助。

  1. strace命令的常用参数

-tt 在每行输出的前面,显示毫秒级别的时间

-T 显示每次系统调用所花费的时间

-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。

-f 跟踪目标进程,以及目标进程创建的所有子进程

-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称

-o 把strace的输出单独写到指定的文件

-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节

-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。

  1. strace命令实现原理

strace是一个可以跟踪系统调用和信号的Linux命令行工具。它通过利用内核的ptrace系统调用来实现对进程的监控,每当被跟踪的进程执行系统调用时,系统会发送一个信号通知strace进行处理并打印出系统调用的详细信息。

strace的实现过程大致如下:

1. strace通过命令行参数指定要跟踪的命令和参数。它首先调用fork()来创建一个子进程,然后使用exec()运行要跟踪的命令。

2. 在子进程中,strace使用ptrace()系统调用来追踪进程的执行。ptrace()会让strace成为一个进程的父进程,可以监视和控制该进程的执行。

3. strace在子进程中循环等待信号,每当被跟踪的进程执行系统调用时,内核会发送SIGTRAP信号通知strace处理该事件。

4. strace捕获SIGTRAP信号后,它会调用ptrace()来获取进程的当前状态和寄存器信息,并解析系统调用的参数和返回值等信息。

5. strace将解析出来的信息打印到标准输出,并回到步骤3等待下一个信号。

6. 当被跟踪的进程结束或收到信号时,strace会调用ptrace()来结束跟踪进程并退出。

总的来说,strace的实现利用了ptrace()系统调用来监控和控制进程的执行,并通过解析系统调用信息来打印出调试信息,从而实现了跟踪系统调用和信号的功能。

  1. fork()函数及父进程与子进程

fork()函数用于创建一个新的进程。新的进程是子进程,它是父进程的副本,但是它有自己的地址空间和进程标识符。

在 Linux 中,父进程和子进程是两个相互关联的进程。父进程是创建子进程的进程,子进程是由父进程创建的进程。

当父进程调用 fork 函数时,系统会创建一个与父进程完全相同的子进程。子进程从父进程那里继承了所有的资源,包括内存、文件描述符、信号处理函数等。但是,子进程是一个独立的进程,它有自己的地址空间和进程标识符,可以独立地执行代码。

父进程和子进程之间的关系是相互独立的,但它们也可以相互通信和协作。父进程可以通过信号、管道、共享内存等方式与子进程进行通信。同时,子进程也可以通过信号、管道、共享内存等方式与父进程进行通信。

父进程还可以使用 ptrace 函数来跟踪和调试子进程。

但是,需要注意的是,子进程是一个独立的进程,它有自己的地址空间和进程标识符,父进程不能直接修改子进程的内存或寄存器。父进程只能通过系统调用来与子进程进行通信和协作。

总的来说,父进程可以通过系统调用来管理子进程,但不能直接控制子进程的执行。

  1. exec函数

用于在进程中执行新的程序

  1. Sigtrap信号

在 Linux 中,Sigtrap 信号是一种软件产生的信号,通常用于调试目的。当进程接收到 Sigtrap 信号时,它会停止执行,并将控制转移到一个指定的信号处理函数。这个信号处理函数可以用于检查程序的状态,或者进行其他调试操作。Sigtrap 信号通常由调试器或其他调试工具发送,以帮助开发人员调试程序。

  1. ptrace()函数

Ptrace 是 Linux 中的一个系统调用,用于跟踪和调试进程。它允许一个进程查看和修改另一个进程的内存和寄存器,以及控制另一个进程的执行。Ptrace 通常用于调试器,以帮助开发人员调试程序。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值