查看linux中已运行进程的输出

查看linux中已运行进程的输出,linux,process,ps,Linux,Process,Ps,我有一个在后台运行的进程(sh脚本),我想知道是否可以在不中断的情况下查看该进程的输出 这个过程是由某个应用程序运行的,否则我会将它附加到屏幕上供以后查看。可能需要一个小时才能完成,我想确保它正常运行,没有错误。您可以尝试连接到/proc/[pid]/fd/[012]三元组,但可能无法工作 我脑海中闪现的下一个想法是strace-p[pid],但您将得到“prittified”输出。可能的解决方案是编写一个小程序,使用ptrace(2)连接到write(2)并将数据写入某个地方,从而实现自我定位

我有一个在后台运行的进程(sh脚本),我想知道是否可以在不中断的情况下查看该进程的输出


这个过程是由某个应用程序运行的,否则我会将它附加到屏幕上供以后查看。可能需要一个小时才能完成,我想确保它正常运行,没有错误。

您可以尝试连接到
/proc/[pid]/fd/[012]
三元组,但可能无法工作

我脑海中闪现的下一个想法是
strace-p[pid]
,但您将得到“prittified”输出。可能的解决方案是编写一个小程序,使用
ptrace(2)
连接到
write(2)
并将数据写入某个地方,从而实现自我定位。它将工作,但不是在几秒钟内完成的,特别是如果你不习惯C编程的话


不幸的是,我想不出一个程序能精确地完成你想要的,这就是为什么我给你一个如何自己编写的提示。祝你好运

已经有一个程序在linux中使用ptrace(2)来实现这一点,retty

如果您正在运行的程序已经连接到tty,它就可以工作。如果您在后台运行程序,我不知道它是否可以工作

至少它可以给你一些好的提示

您可能可以使用
ptrace(2)
从程序中检索退出代码,否则只需使用
gdb-p
将其附加到进程,程序死亡时就会打印出来

您还可以使用gdb操作文件描述符:

(gdb) p close(1)
$1 = 0
(gdb) p creat("/tmp/stdout", 0600)
$2 = 1

它是什么类型的输出?是纯文本吗?如果是这样,你可以用“tail-f”。tail获取文件的结尾,-f标志告诉它“跟随”文件。tail命令还有其他选项,可以指定轮询文件之间的行数和等待时间。问题是,我没有启动此过程,而是由提供程序启动的某个应用程序(cpanel安装程序)启动的不,他们没有将输出重定向到任何文件,否则我会像你建议的那样使用tail,记住有没有查看输出的方法?