我正在尝试检查在我的服务器上“挂起”的进程。我正在使用gdb来附加到这样的过程:
gdb -p PID
虽然在gdb中我运行bt
并获得以下内容:
(gdb) bt
#0 0x00007f57f4be73ba in __getpwuid_r (uid=4113672712, resbuf=0x7f57f531ce40, buffer=0x1 <error: Cannot access memory at address 0x1>, buflen=0,
result=0x7f57f531a048) at ../nss/getXXbyYY_r.c:198
#1 0x00007f5700000004 in ?? ()
#2 0x0000000000000060 in ?? ()
#3 0x0000000000000001 in ?? ()
#4 0x00007f5700000031 in ?? ()
#5 0x0000000000000000 in ?? ()
Cannot Access Memory Address
导致此进程挂起的潜在原因是什么?或者它是否意味着软件已退出但仍有运行过程?
这是一个CasperJS脚本btw。
答案 0 :(得分:0)
无法访问内存地址是导致此进程挂起的潜在原因吗?
没有
您的整个堆栈很可能是虚假的,而且您的流程根本不在__getpwuid_r
内。
可能发生的一种方法是更新系统库,但尚未重新启动该过程。然后,GDB会查看当前安装的系统库,这些库与进程实际使用的副本不匹配。
你可以通过寻找&#34;(已删除)&#34;来证明这是对此的反驳。 /proc/$PID/maps
中的条目。
如果确实如此,那么在获得正确的堆栈跟踪之前,您必须安排GDB查看旧版本的系统库(在启动进程时是最新的)。 This answer可能有助于设置。