Stracing 以附加到多线程进程

2024-01-14

如果我想跟踪一个多线程进程(其所有线程),我应该怎么做?

我知道可以执行 strace -f 来跟踪分叉进程吗?但是当我开始跟踪时附加到已经是多线程的进程怎么样?有一种方法可以告诉 strace 跟踪属于该进程的所有线程的所有系统调用吗?


2021年更新

strace -fp PID只是在我的系统(Ubuntu 20.04.1 LTS)上做了正确的事情。这strace手册页指出了这一点:

       -f          Trace  child  processes  as  they are created by currently traced processes as a result of the fork(2), vfork(2) and clone(2) system
                   calls.  Note that -p PID -f will attach all threads of process PID if it is multi-threaded, not only thread with thread_id = PID.

看起来这段文字是2013 年添加 https://github.com/strace/strace/commit/22efaf0028ddec8f9ed2a2a11e9baaa201594a33. If -f当时我的系统上有这种行为,我没有意识到。不过现在确实如此!

2013年原始答案

我只是用一种笨拙的方式做到了这一点,列出了每个要跟踪的tid。

您可以通过以下方式找到他们ps:

$ ps auxw -T | fgrep program_to_trace
me pid tid1 ...
me pid tid2 ...
me pid tid3 ...
me pid tid4 ...

然后,根据man strace,您可以一次附加到多个 pid:

   -p pid      Attach to the process with the process ID pid and begin tracing.  The trace may be terminated at any time by a  keyboard  interrupt
               signal  (CTRL-C).  strace will respond by detaching itself from the traced process(es) leaving it (them) to continue running.  Mul‐
               tiple -p options can be used to attach to up to 32 processes in addition to command (which is optional if at least one -p option is
               given).

It says pid,但是 Linux 上的 iirc pid 和 tid 共享相同的命名空间,这似乎有效:

$ strace -f -p tid1 -p tid2 -p tid3 -p tid4

我认为这可能是你目前能做的最好的事情了。但我想有人可以延长strace带有用于扩展 tid 的标志。在寻找流程和附加流程之间可能仍然存在一场竞赛,其中新启动的流程可能会被错过。它符合现有的警告strace -f:

   -f          Trace child processes as they are created by currently traced processes as a result of the fork(2) system call.

               On non-Linux platforms the new process is attached to as soon as its pid is known (through the return value of fork(2) in the  par‐
               ent process). This means that such children may run uncontrolled for a while (especially in the case of a vfork(2)), until the par‐
               ent is scheduled again to complete its (v)fork(2) call.  On Linux the child is traced from its first instruction with no delay.  If
               the  parent  process  decides  to  wait(2)  for  a child that is currently being traced, it is suspended until an appropriate child
               process either terminates or incurs a signal that would cause it to terminate (as determined from the child's current signal dispo‐
               sition).

               On SunOS 4.x the tracing of vforks is accomplished with some dynamic linking trickery.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Stracing 以附加到多线程进程 的相关文章

  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav
  • Linux 中有没有一种轻量级的方法来获取当前进程数?

    我希望我的 基于 C C 的 程序显示一个数字指示器 指示本地系统上当前有多少个进程 将经常查询正在运行的进程数值 例如每秒一次 以更新我的显示 有没有一种轻量级的方法来获取该数字 显然我可以调用 ps ax wc l 但我不想强迫计算机生
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • gpg:抱歉,根本没有请求终端 - 无法获取输入

    解密时出现以下错误 eyaml decrypt s ENC and the key goes on here gnupg quiet no secmem warning no permission warning no tty yes de
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • 如果目录不存在,有没有办法让 mv 创建要移动到的目录?

    因此 如果我在主目录中并且想将 foo c 移动到 bar baz foo c 但这些目录不存在 是否有某种方法可以自动创建这些目录 以便你只需要输入 mv foo c bar baz 一切都会顺利吗 似乎您可以将 mv 别名为一个简单的
  • C# - OPC-UA 服务器应用程序尚未在 Linux 计算机中创建 PKI 证书

    当我跑步时OPC UA serverWindows 机器中的 C 应用程序 然后 OPC UA 服务器已创建证书路径C ProgramData OPC Foundation pki own 并在此路径中生成一些证书 但是当我在中安装 OPC
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2

随机推荐

  • 加载 R 包时如何分配可用的变量?

    我已经弄清楚如何制作一个包含一些我经常使用的调色板的包 我修改了代码this https drsimonj svbtle com creating corporate colour palettes for ggplot2博客文章以使其发挥
  • 在程序集中写入文件时出现问题

    我正在尝试用汇编语言编写一个简单的程序 在其中打开一个现有文件并在其中写入一条消息 这是我在数据段中定义的消息 当我想写入文件时会出现问题 在我尝试写入后 AX 寄存器将包含 5 诺顿专家指南称这是 拒绝访问 错误代码 关于我做错了什么有什
  • IronPython db-api 2.0

    有谁知道哪些 db api 2 0 驱动程序可以与 IronPython 配合使用 如果是这样 有人尝试过将它与 SQLAlchemy SQLObject 或 Django ORM 一起使用吗 我知道这是一个很晚的答案 但我今天才看到这个问
  • 如果请求参数不是 Spring MVC 中的 bean,如何验证请求参数?

    下面是我的 Spring MVC REST 服务中的 POST 端点 我想使用 spring 验证框架来确保我收到的列表不为空 我该怎么做 我必须向周围提供包装豆吗listOfLongs RequestMapping value some
  • 使用神经网络进行异或 (Matlab)

    所以 我希望这是我正在做的一件真正愚蠢的事情 并且有一个简单的答案 我正在尝试训练 2x3x1 神经网络来解决 XOR 问题 它不起作用 所以我决定深入了解发生了什么 最后 我决定自己分配权重 这是我想出的权重向量 theta1 11 0
  • 在 mac M1 芯片上构建 docker amd64 镜像

    我正在尝试以两种方式在我的 mac M1 arm64 上构建 dockerfile 下面是 dockerfile 的重要部分 FROM erlang 24 elixir expects utf8 ENV ELIXIR VERSION v1
  • MinGW 32“未定义对‘ExitProcess@4’的引用”

    出于学习目的 我编写了一个小型汇编程序 test asm global main extern ExitProcess 4 section text main mov ebx 0 push ebx call ExitProcess 4 比我
  • 保存并加载自定义 Tensorflow 模型(自回归 seq2seq 多元时间序列 GRU/RNN)

    我正在尝试实现一个自回归 seq 2 seq RNN 来预测时间序列数据 如本 TensorFlow 教程所示 https www tensorflow org tutorials structured data time series a
  • 如何使用 python 读取和写入表/矩阵到文件?

    我正在尝试创建一个程序 该程序获取数据并将其放入文本文件中仅包含数字的 2 x 10 表中 然后程序需要在以后的迭代中检索此信息 但我不知道该怎么做 我一直在研究 numty 命令 常规文件命令以及尝试制作表格的方法 但我似乎无法让这一切发
  • 如何将现有的 SOAP 请求消息导入到 SoapUI?

    我有一堆 XML 格式的 SOAP 请求消息 有没有办法将它们导入到 SoapUI 项目中 我想导入它们并将其作为 测试请求 测试步骤添加到现有测试用例中 一种简单且更自动的方法是使用 groovy 脚本从包含 xml 请求文件的目录自动创
  • 不保留函数依赖的分解

    BCNF 分解什么时候不能保留函数依赖性 我试图弄清楚 R V W X Y Z 取自数据库设计和关系理论 http shop oreilly com product 0636920025276 do R S J T S J gt T T g
  • Python Pandas - 将某些列类型更改为类别

    我已将以下 CSV 文件输入到 iPython Notebook 中 public pd read csv categories csv public 我还将 pandas 导入为 pd 将 numpy 导入为 np 将 matplotli
  • 如何通过属性获取枚举类型?

    我编写了一个枚举类 我想按类型获取属性或按属性获取类型 但这似乎不可能 public enum AreaCode area1 7927 area2 7928 area3 7929 private final int ac AreaCode
  • 尽管存在 OpenSessionInViewFilter,但出现 LazyInitializationException

    尽管在堆栈跟踪本身中看到了过滤器 但我似乎在 Spring MVC 3 0 Hibernate 3 5 应用程序中随机收到以下 LazyInitializationException 知道我应该调查什么吗 07 Jun 2011 13 48
  • 如何在javascript中替换对象数组中的对象(lodash)

    我有以下对象数组 var arr id a1 guid sdfsfd value abc status false id a2 guid sdfsfd value def status true 我有这个对象 var obj id a1 g
  • Hotelling 在 python 中的 T^2 分数

    我在 python 中使用 matplotlib 将 pca 应用于数据集 然而 matplotlib 并不像 Matlab 那样提供 t 平方分数 有没有办法像Matlab一样计算Hotelling的T 2分数 Thanks matplo
  • 在 Interface Builder 中为通用应用程序创建单个 .xib? (iOS)

    如果这是一个愚蠢的问题 我深表歉意 但我已经做了一些谷歌搜索并进行了搜索 但没有发现有人问这个确切的问题 我从事 iOS 开发已经有一段时间了 但我对 Interface Builder 完全陌生 我想知道的是 有没有办法只创建一个 xib
  • 有没有办法刷新 WPF 中的所有绑定?

    如果我的代码看起来有点像下面的代码 是否可以直接刷新所有绑定 或者我是否必须对所有绑定进行硬编码才能刷新 服务端 ServiceContract public interface IMyServiceContract OperationCo
  • 图着色算法:典型的调度问题

    我正在训练像 UvA 这样的代码问题 我有这样一个问题 其中我必须 给定一组n考试和k参加考试的学生 了解是否可以将所有考试安排在two时隙 Input 几个测试用例 每个都以包含以下内容的行开头1 安排不同的考试 第2行是案例数k其中至少
  • Stracing 以附加到多线程进程

    如果我想跟踪一个多线程进程 其所有线程 我应该怎么做 我知道可以执行 strace f 来跟踪分叉进程吗 但是当我开始跟踪时附加到已经是多线程的进程怎么样 有一种方法可以告诉 strace 跟踪属于该进程的所有线程的所有系统调用吗 2021