linux - 按 pid 进行跟踪,包括子进程

标签 linux fork strace

我是 strace 新手,我想 strace 一个 fork 的 child 。因为我想以普通用户身份执行此操作,所以我想要通过 pid 进行 strace 的进程需要是跟踪进程 (strace) 的子进程,因此我需要 fork 两次。在bash中:

( ( sleep 1; echo "I'm echoed from a child of strace" )& exec strace -p $! ) 
#the sleep is for giving strace time to attach itself

这一切都有效,但是我也想跟踪被跟踪进程的子进程,一旦我将 -f 开关添加到 strace,我就会收到错误:

( ( sleep 1; echo "I'm echoed from a child of strace" )& exec strace -fp $! ) 
#=> strace: attach: ptrace(PTRACE_ATTACH, ...): No such process

有什么建议吗?

最佳答案

您可以跟踪您自己用户的所有进程,而不仅仅是 strace 的子进程。

针对您遇到的问题,您可以将命令重写如下:

strace -f bash -c ' sleep 1; echo "我是从 strace 的 child 那里得到的回声"'

关于linux - 按 pid 进行跟踪,包括子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980825/

相关文章:

c++ - fork 后全局资源的归属

c - 进程与信号同步

c - ptrace在用户级还是内核级工作?

php - "strace"输出中的(超时)是什么意思? (mysql/php 分析)

c - 为什么读取后没有调用fstab64?这会成为问题吗?

regex - 在 Bash 中使用逗号分隔的字符串作为变量的输入

c++ - 将文件映射到ram

java - 从可执行文件中查找 rpm 名称

linux - 解析 shell 脚本中命令的输出

c - clone 和 fork+unshare 的区别