我如何才能收听正在运行的Linux进程



我在服务器中作为一个单独的进程运行一个rake任务,并在STDOUT上打印跟踪该脚本的进度。

在SSH连接时,我的互联网连接重置。当我重新建立与服务器的连接时,我发现进程仍在运行。我想听听它的STDOUT输出。我有流程id。

我该怎么做?

对于未来,请考虑屏幕。这个奇妙的小工具可以容纳大量的虚拟终端,让你可以轻松地从一个终端切换到另一个终端(甚至不需要使用鼠标),但最好的是,如果你断开连接,虚拟终端就会继续运行,直到你重新连接并恢复屏幕会话。

启动屏幕会话:

screen

要故意分离屏幕会话,以便断开连接并保持其运行:

C-a C-d

要重新连接分离的屏幕会话

screen -dr

它还有很多,但这足以让你开始。

retty应该执行您想要的操作。http://pasky.or.cz/dev/retty/

我没有现成的Linux虚拟机来测试这一点,但您可能可以使用gdb连接到进程,open(2)是一个新的文件描述符,用作标准输出,然后dup2(2)连接到fd 1。

strace  -p $pid_of_process_you_want_to_see_stdout_of 2>&1| sed -re 's%^write(1,[[:blank:]](.*),[[:blank:]]*[0-9]+)[[:blank:]]*=[[:blank:]]*[0-9]+%1%g'

这里被盗:

https://superuser.com/questions/473240/redirect-stdout-while-a-process-is-running-what-is-that-process-sending-to-d

最新更新