如何得到一个已运行 service 的 log 输出?

Q: 一个已经在运行的 service,并没有在文件中保存自己的log,如何得到它的输出?
A: 借助 gdb,可以将该进程的 fd 任意修改。

  1. gdb -> attach $pid -> call open("'/dev/pts/20'", 66, 0666) // 20 是dst,新的位置
  2. /proc/$pid/fd/ 下,可以看到一个新的 fd 指向 20,比如是 6
  3. call dup2(6, 1); call dup2(6, 2) // dup to : 把 fd6 复制到 fd1, 2 (标准输出 & error)
  4. call close(6)
  5. deatch; quit;

这样做以后,你就会在 pts/20 中看到这个进程的输出了。

(再严谨一点的话,可以在 第 2 步后,把旧的 dup 出来,然后在第 4 步的时候 close 掉。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容