使用Linux strace追踪系统调用: 一个详细指南

使用Linux strace追踪系统调用: 一个详细指南

Linux strace是一个强大的命令行工具,用于监视和调试进程中发生的系统调用和信号。它对于系统管理员和开发人员来说是理解程序行为和解决问题的重要工具。

什么是strace?

strace是一种跟踪运行中的进程执行的系统调用和接收到的信号的工具。系统调用是程序向操作系统请求服务的方式,例如文件操作、网络通信或内存分配等。通过监控这些调用,我们可以了解程序的运作情况。

安装strace

大多数Linux发行版都预装了strace。如果没有,可以通过发行版的包管理器安装它:

# 在基于Debian的系统上:
sudo apt-get install strace# 在基于RPM的系统上:
sudo yum install strace# 在Arch Linux上:
sudo pacman -S strace

基本使用

strace的基本用法是在命令前加上strace。例如,要追踪ls命令:

strace ls

这会输出ls命令执行的所有系统调用。

追踪特定的进程

要追踪一个已经运行的进程,可以使用-p参数后面加上进程ID:

strace -p 12345

保存输出到文件

使用-o参数,可以将输出保存到文件:

strace -o output.txt ls

追踪特定系统调用

使用-e参数可以指定只追踪特定的系统调用:

strace -e open,close,read,write ls

追踪子进程

使用-f参数可以追踪由当前进程派生的所有子进程:

strace -f -o output.txt myscript.sh

追踪系统调用的统计信息

使用-c参数可以在程序执行完成后提供一个系统调用的统计报告:

strace -c ls

过滤输出

strace输出可能非常冗长。可以使用grep工具过滤结果:

strace ls 2>&1 | grep open

这将只显示包含open系统调用的行。

调整输出信息

strace提供了多个参数来调整输出的详细程度,如-v(详细输出),-s(设置字符串大小),或-e(表达式)来更精细地控制输出。

# 更详细地输出
strace -v ls# 增加字符串参数的输出长度,默认为32
strace -s 64 ls# 只输出指定条件的系统调用
strace -e trace=%file ls

实例分析

假设我们有一个不断崩溃的脚本myscript.sh。我们可以用strace来调查问题:

strace -o debug.txt ./myscript.sh

我们可以分析debug.txt文件,来看看在崩溃之前发生了哪些系统调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】宝塔default.db占用空间几十g解决方法|宝塔占用磁盘空间特别大解决方法|宝塔磁盘被占满怎么清理

目录 一、前言二、排查问题三、解决方法 一、前言 用过宝塔创建网站,大家应该都非常熟悉,但是用随着用的时间越来越多,宝塔所占用的空间也越来越多,不停的加大数据盘都没有用,我原先买了30G够用了,随着时间…

代码随想录算法训练营第二十九天| LeetCode 491.递增子序列、46.全排列、47.全排列 II

一、LeetCode 491.递增子序列 题目链接/文章讲解/视频讲解:https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html 状态:已解决 1.思路 这道题看似和90题差不多,都是求子集并且有重复元素,但实则…

力扣24. 两两交换链表中的节点

Problem: 24. 两两交换链表中的节点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy和尾指针tial指向dummy;创建指针p指向head 2.当head不为空同时head -> next 不为空时: 2.1.创建指针nextP指向p -> next -> next; 2.2…

0203逆矩阵-矩阵及其运算-线性代数

文章目录 一、逆矩阵的定义、性质和求法二、逆矩阵的初步应用结语 一、逆矩阵的定义、性质和求法 定义7 对于 n n n阶矩阵A,如果有一个 n n n阶矩阵B,使 A B B A E ABBAE ABBAE 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆…

[xboard]real6410-3 官方镜像烧录与功能测试

文章目录 1 real6410官方资源1 官方镜像2 官方源码3 官方测试2 ok6410a资源3 友善6410资源4 uboot学习参考 1 real6410官方资源 1 官方镜像 2 官方源码 3 官方测试 2 ok6410a资源 3 友善6410资源 4 uboot学习 参考

Redis Stack十部曲之二:理解Redis Stack中的数据类型

文章目录 前言String字符串作为计数器限制 List限制列表阻塞列表自动创建和删除聚合类型键限制 Set限制 Hash限制 Sorted Set范围操作字典操作更新分数 JSON路径限制 BitMapBitfieldProbabilisticHyperLogLogBloom filterCuckoo filtert-digestTop-KCount-min sketchConfigurat…

抽象类为什么有抽象方法?

以一个简单的图形绘制程序为例,其中我们将创建一个抽象类Shape,它定义了所有形状共有的行为和属性,同时允许具体的子类提供自己的实现。 首先,我们定义一个抽象类Shape: java public abstract class Shape { // 形状的…

mongodb 基础查询使用

环境安装 https://blog.csdn.net/qq_42402648/article/details/134932412 net start MongoDB 启动 net stop MongoDB 停止测试插入数据结构 {"create_time": {"$data": "1711244538176"},"language": "en","create_ti…

AI绘画:Stable Diffusion的高效操作界面,ComfyUI:安装和使用篇

前言 Stable Diffusion(简称SD)是一款强大的AI绘画工具,通常通过Web UI操作界面进行使用。然而,对于那些寻求更高效率和个性化工作流的用户来说,ComfyUI提供了一个基于节点流程的操作界面,使得工作流定制更…

文献分享:《Clinical metagenomics》

摘要|临床宏基因组下一代测序(mNGS)是对患者样本中微生物和宿主遗传物质(DNA和RNA)的综合分析,目前正迅速从研究向临床实验室发展。这种新兴的方法正在改变医生诊断和治疗传染病的方式,其应用涉及广泛的领域…

Java快速入门系列-1(Java概述)

第一章:Java概述 1.1 Java的发展历程1.2 Java的特点与优势1.2.1 特点1.2.2 优势 1.3 Java生态系统介绍1.4 Java在当前技术领域的应用案例 1.1 Java的发展历程 Java语言由Sun Microsystems公司于1995年推出,由James Gosling领导的Green Team小组研发而成…

【深度学习】入门深度学习相关

1.知识点&&小问题 参考视频:最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程 1.Pytorch和TensorFlow都是python的包/库。 2.为什么使用Anaconda?Anaconda的优势是有虚拟环境。 3.计算机底层对于Python语言&…

git branch 是干什么的

git branch 是 Git 版本控制系统中的一个命令,用于列出、创建、删除和重命名仓库中的分支。分支在 Git 中是一个非常重要的概念,它允许开发者在主线(通常是 master 或 main 分支)之外创建新的开发线,以在不干扰主线的情…

关于C#操作SQLite数据库的一些函数封装

主要功能:增删改查、自定义SQL执行、批量执行(事务)、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装: using System; using System.Collections.Generic; using System.Data.SQLite; using System.…

WebGL BabylonJs 如何切换相机

根据不同场景,可能会有多个相机切换的需求 ,通过scene.activeCamera即可实现。 例如: // 1、创建多个相机const freeCamera new BABYLON.FreeCamera(FreeCamera,new BABYLON.Vector3(-50, -8, -16),scene,)const arcRotateCamera new BAB…

深入理解JavaScript - 箭头函数中的this永远指向全局对象?

箭头函数中的this永远指向全局对象? 不是!!!!!! 箭头函数并没有自己的this值,它捕获定义时所在上下文的this值作为自己的this值。 也就是说,箭头函数中的 this是在定义…

天眼护航 安全无界:天通哨兵PS02—电力巡检保护的智能利器

在电力行业中,输电线路的安全稳定运行对于保障社会经济活动至关重要。然而,广阔的输电线路常常穿越复杂的地形和恶劣的自然环境,给电力巡检和保护工作带来了巨大挑战。 为了提高巡检效率和响应速度,更好地保障电力设施的安全运行…

Opencv人机交互界面设置

Opencv人机交互界面设置 以下是一些常见的OpenCV人机交互界面设置: 窗口交互 显示窗口:可以使用cv2.imshow()函数在屏幕上显示图像。例如,要显示名为“image”的图像,可以使用以下代码: import cv2img cv2.imread…

前端三剑客 —— CSS (第三节)

目录 上节回顾: 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 : 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中,一个实例(cluster)初始化完以后,你会看到有下边两个与表空间相关的目录生成: $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息: postgres# \db …