获取正在运行的命令的最新输出

Mik*_*.C. 3 process monitoring proc output

我有一个命令运行了很长时间,我不想打扰它。但是,我想继续检查这个过程(大部分时间是远程的)。我通过像命令不断地监测这过程topiotopstat等。该处理是基于终端的方法,该方法不是通过启动screentmux或类似。所以检查输出的唯一方法是使用物理访问。

我知道其中/proc包含有关该过程的大量信息。所以我想知道它是否也可以显示输出(甚至只是最后一批输出——字符/字/行)。我搜索了/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
Run Code Online (Sandbox Code Playgroud)

任何指针?

mos*_*svy 5

我会使用strace

strace -qfp PID -e trace=write -e write=1,2
Run Code Online (Sandbox Code Playgroud)

这将跟踪write(2)PID 及其子进程的所有系统调用,并十六进制转储写入文件描述符 1 和 2 的数据。

当然,这不会让您看到进程已经写入 tty 的内容,但会从一个点开始监视所有写入。

此外,strace无法更改其输出格式——如果您需要更大的灵活性,您应该探索使用gdb(1)或编写一个小程序ptrace(2)