Process

獲取正在執行的命令的最新輸出

  • November 4, 2018

我有一個命令執行了很長時間,我不想打擾它。但是,我想繼續檢查這個過程(大部分時間都是遠端的)。我不斷地通過諸如top,iotop等命令監視程序stat。該程序是一個基於終端的程序,它不是通過或類似方式啟動screentmux。所以檢查輸出的唯一方法是使用物理訪問。

我知道其中/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)

引用自:https://unix.stackexchange.com/questions/478214