如何在不杀死被跟踪进程的情况下杀死 strace?

How do I kill strace without killing the process being traced?

我正在尝试调试应用程序的启动。我想使用 strace 来跟踪应用程序在启动期间执行的系统调用,但是一旦应用程序启动我不希望 strace.[= 的性能开销18=]

如果你 运行 strace 通常:

strace -f myprogram

那么如果你试图杀死 strace,它会带走 myprogram

您可以将 strace 附加到 运行ning 进程,如下所示:

strace -f -p <myprogram pid>

但是很难获得应用程序启动的痕迹。

有没有办法捕获应用程序启动的痕迹,然后分离 strace?

一种方法是使用 strace-D 标志,运行 将 strace 进程作为被跟踪进程的后代。

例如:

strace -f -D myprogram

将开始追踪 myprogram。现在运行宁:

killall strace

将终止 strace 进程,但 myprogram 将继续 运行。