我的计算机上运行了几个Linux(Ubuntu 10.04)进程。如果我启动其中一个,我可以在终端上看到它的详细信息。我有一个其他进程启动了十几个进程,以便它们在后台运行。但是,我想观察其中一个进程的输出,看看输出是否仍然正常,并且没有错误消息。我知道我可以将所有内容发送到日志消息中,但是,这只会占用太多磁盘空间。那么,有没有办法在Linux中使用它的进程ID“捕获”正在运行的进程的输出?
答案 0 :(得分:4)
您可以将 gdb 附加到正在运行的进程,并在您想要查看输出时将stdout / err或两者重定向到某个日志文件(在重定向之前确保文件存在强>):
gdb attach PID (gdb) p dup2(open("/tmp/mylogfile-stdout", 0), 1) (gdb) p dup2(open("/tmp/mylogfile-stderr", 0), 2) (gdb) detach (gdb) quit
当你希望他们回到沉默时,只需这样做:
gdb attach PID (gdb) p dup2(open("/dev/null", 0), 1) (gdb) p dup2(open("/dev/null", 0), 2) (gdb) detach (gdb) quit
'detach'部分很重要,否则当gdb退出时你会杀死你附加的进程。有关详细信息,请参阅this question。
答案 1 :(得分:1)
使用重定向,如
yourprogram arg1 arg2 > yourprog.out
或者甚至可能(重定向stderr& stdout并在后台运行)
yourprogram arg1 arg2 > yourprog.out 2>&1 &
在其他终端中,执行
tail -f yourprog.out
使用-f
选项,tail
命令将注意文件何时增长并显示其最新行
但我看不到便携式重定向方式。也许screen
,batch
,at
,cron
可能会对您有所帮助。或者打开/proc/1234/fd/1
...
顺便说一句,我很惊讶你的输出没有足够的临时磁盘空间......
我确实喜欢在emacs下运行M-x shell
,并在那里运行我的程序。