Process
獲取正在執行的命令的最新輸出
我有一個命令執行了很長時間,我不想打擾它。但是,我想繼續檢查這個過程(大部分時間都是遠端的)。我不斷地通過諸如
top
,iotop
等命令監視程序stat
。該程序是一個基於終端的程序,它不是通過或類似方式啟動screen
的tmux
。所以檢查輸出的唯一方法是使用物理訪問。我知道其中
/proc
包含許多有關該過程的資訊。所以我想知道它是否也可以顯示輸出(甚至只是最後一批輸出——char/word/line)。我在 中搜尋/proc/<pid>/fd
,但找不到任何有用的東西。下面是輸出
ls -l /proc/26745/fd/*
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/0 -> /dev/pts/17 lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/1 -> /dev/pts/17 lrwx------ 1 user user 64 Sep 27 22:27 /proc/26745/fd/2 -> /dev/pts/17
任何指針?
我會為此使用
strace
:strace -qfp PID -e trace=write -e write=1,2
這將跟踪
write(2)
PID 及其子程序的所有系統呼叫,並以十六進制轉儲寫入文件描述符 1 和 2 的數據。當然,這不會讓您看到程序已經寫入 tty 的內容,但會從某個點開始監視所有寫入。
此外,
strace
不適合更改其輸出格式 -如果您需要更多靈活性,您應該探索使用gdb(1)
或編寫一個小程序。ptrace(2)