我想用GDB调试正在运行的守护程序。我有相应进程的进程ID。我输入了:gdb附加进程ID信息线程
我正在获取线程列表。 *一个是当前正在运行的线程(如果我输入错了,请纠正我)
现在我要发送:
systemctl kill守护进程名(此命令我正在其他终端上运行)
现在,我想在单击此命令后检查正在运行哪个线程。
因为我的守护进程被卡住了。它无法正常杀死。我尝试使用service-name status命令。由于上面的“ servicename status”命令后卡住了。我想跟踪最后一个被卡住的线程,因为我的守护程序仍然没有被杀死,但是运行用于检查该守护程序状态的命令被卡住,没有输出输出。则应显示该服务未运行或如果被正确终止则找不到命令。
请帮助我。我是新来的
答案 0 :(得分:0)
我尝试使用服务名称状态命令。
您可能认为错误。
执行systemctl kill daemonname
之后,您想将GDB附加到进程中,并查看它被卡在哪里 (使用thread apply all where
)。
您可能会看到线程处于死锁状态(例如,线程T1等待线程T2持有的互斥锁A;线程T2等待线程T1持有的互斥锁B)。
我想跟踪最后被卡住的线程
通常,跟踪多线程进程是一个愚蠢的错误,因为您正在跟踪进程这一事实会更改执行环境,并且常常导致它不再与没有跟踪的执行相匹配。
相反,您应该考虑不变量,并确保不违反它们。