Q: 一個(gè)已經(jīng)在運(yùn)行的 service酸茴,并沒有在文件中保存自己的log,如何得到它的輸出?
A: 借助 gdb噩峦,可以將該進(jìn)程的 fd 任意修改锭沟。
-
gdb -> attach $pid -> call open("'/dev/pts/20'", 66, 0666)
// 20 是dst,新的位置 - 去
/proc/$pid/fd/
下识补,可以看到一個(gè)新的 fd 指向 20族淮,比如是 6 -
call dup2(6, 1); call dup2(6, 2)
// dup to : 把 fd6 復(fù)制到 fd1, 2 (標(biāo)準(zhǔn)輸出 & error) call close(6)
deatch; quit;
這樣做以后,你就會(huì)在 pts/20 中看到這個(gè)進(jìn)程的輸出了李请。
(再嚴(yán)謹(jǐn)一點(diǎn)的話瞧筛,可以在 第 2 步后,把舊的 dup 出來导盅,然后在第 4 步的時(shí)候 close 掉较幌。)