能否使用xtrace附加到已运行的进程?
能否使用xtrace附加到已运行的进程?
很遗憾,xtrace没办法附加到已经在运行的进程——这是由它的本质决定的。
xtrace是bash shell内置的调试功能(通过set -x或者bash -x启用),它的工作方式是在shell执行命令的过程中,实时打印出执行的每一条命令和参数。它完全依赖于shell的内部执行流程,只能在进程启动前启用,没办法事后“挂载”到已经运行的进程上。
你提到的strace是系统级的调试工具,它通过跟踪进程的系统调用和信号来工作,所以可以附加到任意PID的运行进程;但xtrace是shell层面的,只负责跟踪当前shell(或它启动的子shell/命令)的执行步骤,没有跨进程附加的能力。
如果你的场景允许提前做准备,倒是可以在父脚本启动子进程时就开启xtrace,比如:
- 直接用bash的调试模式启动子命令:
bash -x -o xtrace -c "command-of-interest" 2> xtr.txt - 或者在子进程的环境里先开启
set -x,再执行命令:(set -x; command-of-interest) 2> xtr.txt
这样就能得到你需要的跟踪日志,同时不会干扰父脚本的正常运行。
备注:内容来源于stack exchange,提问作者user985675
相关产品推荐
相关产品推荐

