您的位置:首页 > 大数据 > 人工智能

aix下进程异常退出问题排查

2015-02-05 20:14 543 查看
现象:一常驻进程运行一段时间后异常退出,其父进程检测到其exit code为1,该进程主要工作为从队列中收到某种类型的消息时做oracle数据库的select操作

问题分析:经排查代码中并无exit操作,初步怀疑是oracle提供的库中有函数执行了exit,但无直接证据。为此通过atexit注册一个函数,该函数可打印本线程的堆栈信息,当进程通过exit退出时,必调用此函数

解决:分析进程退出时的堆栈信息

0x090000000010bda0  waitpid(??, ??, ??) + 0x200

0x09000000001e268c  system(??) + 0x14c

0x0000000100001394  cleanup() + 0x114

0x0900000000054e40  exit(??) + 0x140

0x090000000be6d04c  skgesigCrash(??) + 0x4c

0x090000000be6d3e8  skgesig_sigactionHandler(??, ??, ??) + 0x1e8

<signal>
0x090000000ddf7024  ........................................

可看到程序运行过程中,代码问题产生了信号,该信号被oracle的信号处理函数skgesig_sigactionHandler捕获,skgesig_sigactionHandler做了exit操作导致进程退出。至于为何产生这个信号,由于数据库操作的代码是其他部门开发的,未能深究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aix c 数据库 oracle