我在服务器中作为一个单独的进程运行一个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