有时通过SecureCRT或者Putty远程ssh到主机上执行某个进程,因长时间没有交互导致ssh断链,此时该进程由init进程收留。该进程的输出也就无法获得了。

这种情况下,可以利用gdb重新获得该进程的标准输出,方法如下:

1:获得程序的进程号(PID),以某个python进程为例:

# ps –ef|grep python
……
root 22167 1 0 18:15 ? 00:00:00 python test.py
……

2:使用gdb调试这个进程:

# gdb -p 22167
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Attaching to process 22167
Reading symbols from /usr/bin/python...(no debugging symbols found)...done.
Reading symbols from /usr/lib64/libpython2.6.so.1.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libpython2.6.so.1.0
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /lib64/libutil.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libutil.so.1
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /usr/lib64/python2.6/lib-dynload/timemodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/timemodule.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/selectmodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/selectmodule.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/fcntlmodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/fcntlmodule.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/_struct.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/_struct.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/binascii.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/binascii.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/cStringIO.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/cStringIO.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/_functoolsmodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/_functoolsmodule.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/_collectionsmodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/_collectionsmodule.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/operator.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/operator.so
Reading symbols from /usr/lib64/python2.6/lib-dynload/itertoolsmodule.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/python2.6/lib-dynload/itertoolsmodule.so
0x0000003f7e8e15e3 in select () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install python-2.6.6-51.el6.x86_64

或者可以先运行 gdb ,然后用 attach 命令,如下:

$gdb
$atta 22167
......

3:GDB 提供的 call 命令允许调试者在当前函数调用栈的栈顶调用函数,犹如在被调试的程序中执行的一般。可以通过close系统调用关闭标准输出(STDOUT)或者标准错误(STDERR):

(gdb) call close(1)
$1 = 0

4:通过open系统调用打开一个文件,并将其文件描述符通过dup2系统调用复制给标准输出:

(gdb) call dup2(open(”/tmp/log”, 2), 1)
$2 = 1

5:如果希望将标准输出定位到当前终端上,可以执行下面的命令:

(gdb) shell tty
/dev/pts/0
(gdb) call dup2(open ("/dev/pts/0",2) , 1)
$2 = 1

6:退出gdb。

(gdb) quit
A debugging session is active. Inferior 1 [process 22167] will be detached. Quit anyway? (y or n) y
Detaching from program: /usr/bin/python, process 22167

现在就可以通过/tmp/log或者当前终端重新获得该进程的标准输出了。

参考:

http://www.ibm.com/developerworks/cn/linux/l-cn-redirect/

http://blog.csdn.net/lida2003/article/details/7899777

http://www.michael--martinez.com/computers/controlterm.html

通过GDB重新获得进程的输出的更多相关文章

  1. 使用gdb调试Python进程

    使用gdb调试Python进程 有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump.例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到 ...

  2. adb logcat查看某个进程的输出日志

    adb logcat查看某个进程的输出日志 adb logcat 默认是没有这个功能的,我实现了一个小bash函数,添加到你$HOME/.bashrc 文件中: # 作用:能够通过进程名显示log # ...

  3. 批处理:根据进程名称查询进程,如果有进程就输出up没有就输出donw

    需求:windows系统上  根据进程名称查询进程,如果有进程就输出 up ,没有就输出  donw. ::Final interpretation is owned by chenglee ::@e ...

  4. 系统中sshd进程的查看,数量统计,进程号输出,进程清理命令

    1. 查看sshd进程 ps -ef|grep sshd ps -ef:打开所有的进程 grep sshd:过滤出含有“sshd”字符的进程. 2. 查看sshd进程中的sftp进程,不含查询的进程 ...

  5. Linux nohup和&后台运行,进程查看及终止,进程信息输出,控制台信息输出

    nohup和&后台运行,进程查看及终止   1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输 ...

  6. GDB将所有线程堆栈输出到文件

    在调试多线程程序时,经常需要查看线程堆栈信息,如果线程数目过多,每次查看一个线程堆栈,繁琐耗时.下面介绍一种一次性将所有线程堆栈输出到文件的方法. 首先,将gdb attach到调试线程 gdb -p ...

  7. GO 通过进程号输出运行运行信息

    操作系统应用可以使用PID来查找关于进程本身的信息.当进程失败时获取到的PID就非常有价值,这样就可以使用PID跟踪整个系统中的系统日志,如/var/log/messages./var/log/sys ...

  8. c/c++gdb下和发布版本下输出地址不同

    相差4字节 相差8个字节 原因: 这4个字节是优化掉了,64位操作系统,函数传参通过寄存器,减少了栈的使用 debug模式下,abc的地址都存下来了.

  9. 一条命令,根据进程名判断有进程输出up,无进程无输出

    这个研究了好一会, 由于开发需要,提供的命令. shell命令,可以按照分号分割,也可以按照换行符分割.如果想一行写入多个命令,可以通过“';”分割. a=`ps -ef | grep nginx | ...

随机推荐

  1. 解决github下载慢的终极方法

    直接用ssr代理,使用全局代理. 下载墙外的软件,都可以,比如 GithubDsktop

  2. 【python自动化学习笔记】

    [python自动化第一篇:python介绍与入门] [python自动化第二篇:python入门] [python自动化第三篇:python入门进阶]      [Python自动化第三篇(2):文 ...

  3. 【logo】设计书籍的logo

    一个女孩发光般的看着,眼前发现的书籍 含义:这本书就是女孩想要得到的书籍 平台的宗旨:就是让学生能够得到想要的书籍 书籍来源:其他学生的书籍 目的:实现书籍回收再利用,同时让接受者低于市场价得到

  4. Django用户登陆以及跳转后台管理页面1

    """S14Djngo URL Configuration The `urlpatterns` list routes URLs to views. For more i ...

  5. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU外设那些事(2)- 善变的FlexRAM

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的FlexRAM外设. 本文是外设系列第二篇,上一篇讲的是离内核最近的高速缓存L1 Cache, ...

  6. excel怎么制作三维圆环图表

    excel怎么制作三维圆环图表 excel怎么制作三维圆环图表?excel中想要制作一个三维圆环图表,该怎么制作呢?下面我们就来看看详细的教程,很简单,在Excel中,可以通过自带的圆环图功能生成二维 ...

  7. shell 中数组学习

         因为应用shell的时间不是太长.对于数组在实际项目中没有接触过.今天在需要把相似于:a=1,2,3,4这种东西转换. 之前用的方法是用awk,分别取出.所以今天想是否有更好更简洁的方法-- ...

  8. Vue 实现展开折叠效果

    Vue 实现展开折叠效果 效果参见:https://segmentfault.com/q/1010000011359250/a-1020000011360185 上述链接中,大佬给除了解决方法,再次进 ...

  9. EMAS,一部淘宝十年移动互联网技术的演进史

    导读 本文根据2018云栖大会深圳峰会·EMAS专场—移动互联的进化论,阿里巴巴高级技术专家泠茗< EMAS全景介绍>的演讲整理而成,文中就EMAS的起源史及EMAS的五大移动研发场景解决 ...

  10. 如何使我们的薪资15k?

    以下我们来探讨一下如何才能使我们具备高薪15K的能力? 要想使自己的薪资成为15K,我首先想到的是我们的能力?编码能力?语言表达能力? 我觉得为之重要的则是我们的综合能力: 方方面面的能力.综合素质: ...