我如何将 strace 附加到不在 ps 输出中的进程?

我如何将 strace 附加到不在 ps 输出中的进程?

我正在尝试调试为什么我们的集成测试花费了这么长时间,而且看起来它们半途而废。

我登录我们的测试服务并看到以下行为:

root@colossus:~# strace -p 18310
Process 18310 attached - interrupt to quit
futex(0x7f9915c609d0, FUTEX_WAIT, 18313, NULL^C <unfinished ...>
Process 18310 detached

root@colossus:~# strace -p 18313
Process 18313 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>^C <unfinished ...>
Process 18313 detached

root@colossus:~# ps -ef | grep 18313
root     19089 19034  0 09:46 pts/0    00:00:00 grep --color=auto 18313

root@colossus:~# ps -p 18313
PID TTY          TIME CMD

我对这些命令的解释是18310等待其子命令18313完成。

进程18313正在尝试重新启动中断的系统调用。

这就是奇怪的地方。虽然我可以附加到18313,但当我运行 时,我无法在当前进程列表中看到它ps

有人可以帮我理解这里发生了什么吗?

答案1

根据 Stéphane 的评论,我看到的是一个线程,而不是一个过程。

线程在输出中列出ps -L

可以使用以下命令跟踪进程的所有当前和未来线程strace -f

相关内容