gpt4 book ai didi

我可以通过堆栈转储判断一个进程是被杀死还是它自己崩溃了吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:51 27 4
gpt4 key购买 nike

当进程被终止时,我得到了一个转储堆栈。

(gdb)
Thread 2 (Thread 0xf6ec6b90 (LWP 10941)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xf7a47525 in *__GI___poll (fds=0xf7fb1558, nfds=1, timeout=-1)
at ../sysdeps/unix/sysv/linux/poll.c:87
#2 0xf7f9138a in timer_thread_entry (arg=0x0)
at ../../../ux/com_ux/libux/com/UXtimer2.c:509
#3 0xf797be7b in start_thread (arg=0xf6ec6b90) at pthread_create.c:298
#4 0xf7a4ff9e in clone () from /lib/libc.so.6

Thread 1 (Thread 0xf796d8d0 (LWP 10686)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xf7a517d9 in __libc_msgrcv (msqid=1736749, msgp=0xff99cb78, msgsz=2160,
msgtyp=0, msgflg=0) at ../sysdeps/unix/sysv/linux/msgrcv.c:59
#2 0xf7f6f647 in _CT_getmsg (mode=0, msgp=0xff99cb78, pmaxtime=0xff99cb6c,
pdata=0xf7faf180, ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2550
#3 0xf7f6fec5 in CT_getmsg_v2 (mode=0, msgp=0xff99cb78, maxtime=10000,
ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2237
#4 0x0804afe9 in main (argc=1, argv=0xff99d4b4)
at ../../../../main/CT_main.cpp:271
#0 0xffffe410 in __kernel_vsyscall ()
  1. 为什么有两个线程?它们是如何联系在一起的?
  2. 通过这个转储,它是否可以表明进程是自己崩溃的,还是被其他人杀死的。
  3. 在“0xf7a47525 in *GI_poll (fds=0xf7fb1558, nfds=1, timeout=-1)”中,“timeout=-1”是什么意思?
  4. 这里如何涉及轮询系统调用?

非常感谢!

最佳答案

  1. 在主程序的某处调用函数 clone() 以创建单独的线程 - 显然是为了处理套接字。
  2. 很可能进程在 msgrcv() 函数中崩溃是因为它的参数。如果因信号而创建故障转储,您将在堆栈跟踪中看到信号处理程序。
  3. timeout = -1 表示无限超时。
  4. 它没有涉及 - 线程在其中被阻塞。

关于我可以通过堆栈转储判断一个进程是被杀死还是它自己崩溃了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16413978/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com