如何得到一个已运行 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 掉。)

你可能感兴趣的:(如何得到一个已运行 service 的 log 输出?)