附加到进程输出以供查看
我将如何“附加”一个控制台/terminal – 视图到应用程序的输出,所以我可以看到它可能是什么意思?
我将如何从应用程序输出中分离而不会中止应用程序?
通常情况下,如果你使用命令行启动一个健谈的应用程序,你会看到各种奇妙的输出。 然而,让我们说我有一个特别健谈的编程运行像KINO,我想查看其输出在任何特定时刻,而不通过命令行重新启动,我不能,至less我不知道如何。
这里有几个选项。 一个是将命令的输出redirect到一个文件,然后使用“tail”来实时查看添加到该文件的新行。
另一种select是在“屏幕”内启动程序,这是一种基于文本的terminal应用程序。 屏幕会话可以附加和分离,但名义上只能由同一个用户使用,所以如果你想在用户之间分享它们,这是一个很大的麻烦。
我想我有一个更简单的解决scheme,只需在/proc
path下的伪文件系统下寻找名称与您正在查找的PID相对应的directoy即可。 所以如果你有一个程序运行,其ID是1199,cd到它:
$ cd /proc/1199
然后查找下面的fd
目录
$ cd fd
这个fd
目录保存你的程序正在使用的文件描述符对象(0:stdin,1:stdout,2:stderr),只是tail -f
– 你需要的 – 在这种情况下,标准输出):
$ tail -f 1
我正在寻找这个完全相同的东西,发现你可以这样做:
strace -ewrite -p $PID
不完全是你所需要的,但它非常接近
我试图redirect输出,但没有为我工作,马比,因为进程是写入一个sockets,我不知道
我将如何“附加”一个控制台/terminal – 视图到应用程序的输出,所以我可以看到它可能是什么意思?
关于这个问题,我知道即使在启动processus之前没有启动sceen命令,也可以捕获输出。
虽然我从来没有尝试过,但我发现了一篇有趣的文章,解释了如何使用GDB(并且不重新启动您的过程)。
redirect输出从-一个运行的进程
基本上:
- 检查打开的文件列表为您的过程,感谢/ proc / xxx / fd
- 把你的进程和GDB挂钩
- 当它暂停时,closures你感兴趣的文件,调用close()函数(你可以在GDB中使用你的进程的任何函数,我怀疑你的进程需要debugging符号)
- 打开一个调用create()或open()函数的新文件。 (看看最后的评论,你会看到人们build议使用dup2()来确保使用相同的句柄)
- 分离进程并让其运行。
顺便说一下,如果你正在i386上运行一个linux操作系统,评论正在谈论一个更好的工具来将输出redirect到一个新的控制台: 'retty' 。 如果是这样,请考虑使用它。
我想远程观看本地运行的yum升级过程,所以虽然可能有更有效的方法来做到这一点,但我做了以下操作:
看猫/ dev / vcsa1
显然,你想使用vcsa2,vcsa3等,这取决于使用哪个terminal。
只要terminal窗口的宽度与命令运行的terminal宽度相同,我就可以每2秒看到一次当前输出的快照。 其他地方推荐的其他命令对我的情况来说并不是特别好,但是其中一个就是这样做的。