我想使用 GDB 调试正在运行的守护进程。我有各个进程的进程ID。我输入:gdb附加进程ID信息线程
我正在获取线程列表。 * 1 是当前正在运行的线程(如果我错了,请纠正我)
现在我发送:
systemctl Kill daemonname(这个命令我在其他终端上运行)
现在我想检查在点击此命令后哪个线程正在运行。
因为我的守护进程被卡住了。它没有正确杀戮。我尝试使用 service-name status 命令。因为在上面的“servicename status”命令之后它被卡住了。我想跟踪最后一个被卡住的线程,因为我的守护进程仍未被终止,但运行用于检查该守护进程状态的命令被卡住,输出中没有输出。而如果它被正确终止,它应该显示该服务未运行或未找到命令。
请帮助我..我是新人
最佳答案
I tried with the service-name status command.
你可能理解错了。
执行systemctl Kill daemonname
后,您希望将GDB附加到进程并查看它卡在哪里(使用thread apply all where
).
您可能会看到线程处于死锁状态(例如,线程 T1 正在等待由线程 T2 持有的互斥体 A;线程 T2 正在等待由线程 T1 持有的互斥体 B)。
I want to trace the last thread that is getting stuck
一般来说,跟踪多线程进程是一件愚蠢的事情,因为跟踪进程的事实会改变执行环境,并且通常会导致它在没有跟踪的情况下不再匹配执行。
相反,您应该考虑不变量,并确保它们不被违反。
关于c - 使用 GDB 调试正在运行的守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571799/