我有这个打开串行端口的屏幕进程:
$ 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
最好的方法是使用strace
PID。
例如,screen 会话位于/var/run/screen/<screen session>
。如果你ls
进入该目录,你会看到会话的 PID。
然后您就可以strace -p <pid>
使用该 PID。它不会很漂亮,但它是您能得到的最接近的结果。
答案2
在您的例子中,屏幕 PID 为 21200(根据screen -ls
命令)。这样pstree 21200
就可以了。同样,htop
在树模式(按 [F5])下也可以看到进程树。