查找屏幕会话中正在运行的内容

查找屏幕会话中正在运行的内容

我有这个打开串行端口的屏幕​​进程:

$ sudo lsof | grep /dev/ttyS0
    screen    23520        root    6u      CHR               4,64         0t0       1421 /dev/ttyS0
$ cd /proc/23520
$ head -n 5 status
    Name:   screen
    State:  S (sleeping)
    Tgid:   23520
    Pid:    23520
$ screen -ls
    There is a screen on:
        21200.pts-1.porkypig    (07/10/2013 12:25:42 PM)    (Detached)
$ screen -r 21200.pts-1.porkypig

当我重新连接到屏幕会话时,为了查看它到底在做什么。我看到了这一长串的信息日志。这似乎是“tail -f”的结果,即连续输出的日志。

/proc/23520 $ cd cwd
 pwd
/proc/23520/cwd
ls -l
-rw-r--r--  1 root        root        2147 2013-10-07 17:55 minicom.log

当我切换到运行此进程的目录 (cwd) 时,我注意到 minicom.log,这让我怀疑用户运行了类似“tail -f minicom.log”的程序。

我知道在 Linux 中我们可以使用历史记录来追溯已运行的命令。但是我如何确认已运行该命令以显示我当前在屏幕会话中看到的内容?

答案1

最好的方法是使用stracePID。

例如,screen 会话位于/var/run/screen/<screen session>。如果你ls进入该目录,你会看到会话的 PID。

然后您就可以strace -p <pid>使用该 PID。它不会很漂亮,但它是您能得到的最接近的结果。

答案2

在您的例子中,屏幕 PID 为 21200(根据screen -ls命令)。这样pstree 21200就可以了。同样,htop在树模式(按 [F5])下也可以看到进程树。

相关内容