在 Ubuntu 上,有没有办法捕获内容伪终端(pts - 例如 /dev/pts/4) - 即将终端中的文本行转储到文件中 - 程序的已经运行在那个终端里?我说的不是截屏,而是将程序写入终端的内容存储到文件中。这是基于 curses 的程序定期重写屏幕。
我的主要问题是我的程序是已经运行- 我想保存这个前停止(或许重新启动)该程序。
我知道有几种方法可以实现这一点,我曾考虑过这种可能性前我启动了该程序:简单地将输出重定向到文件;使用screen
,并获取硬拷贝或记录会话;使用虚拟终端(/dev/tty ..)并使用视频控制台内存设备(/dev/vcs ..);使用命令script
......(可能还有许多其他命令......)
但所有这一切,只有在我开始这个程序之前完成才会有效!
那么,我还有办法“窥探”伪终端并记录其内容吗?如果需要,我可以成为 root 用户……
答案1
也许不是直接从 tty,但此进程必须使用write
系统调用。您可以使用它strace
来捕获所有写入调用。
sudo strace -e t=write -s 6000 -p your-process-id 2>logfile
您将获得类似这样的内容,可能需要更多解析:
write(1, "191\n", 4) = 4
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9916, si_uid=1001, si_status=0, si_utime=0, si_stime=0} ---
write(1, "21021\n", 6) = 6
write(1, "14728\n", 6) = 6
write(1, "13291\n", 6) = 6
write(1, "20372\n", 6) = 6
如果您的程序写入其他文件,您也会在输出中看到这些内容。这可能很烦人。或者最终可能会产生大量数据。使用的文件描述符可能是 1。您可以 grep "^write.1"
sudo strace -e t=write -s 6000 -p your-process-id 2>&1 | grep ^write.1 >logfile
下次,尝试使用 运行命令script
。它会捕获写入 tty 的所有数据。
script -c "program and args" logfile