我有一个进行配置管理的守护进程。所有其他进程都应与此守护进程交互以实现其功能。但是当我执行一个大动作时,几个小时后,守护进程会在 2 到 3 小时内无响应。2-3小时后,它可以正常工作。
Linux 进程挂起问题的调试实用程序?
如何获得linux进程挂起的时间?
这些中的每一个都可能提供一些信息,这些信息共同构成了问题的图景。
使用 gdb 时,在应用程序被阻止时触发核心转储可能很有用。然后,您有一个静态快照,您可以在闲暇时使用事后调试对其进行分析。您可以通过脚本触发这些。您可以快速建立一组快照,用于测试您的理论。
一种选择是使用gdb
和使用attach
命令以附加到正在运行的进程。您将需要加载一个包含相关可执行文件符号的文件(使用file
命令)
有许多不同的方法可以做到:
侦听 UNIX 域套接字,以处理状态请求。然后外部应用程序可以询问该应用程序是否仍然正常。如果在某个超时时间内没有得到响应,那么可以假设被查询的应用程序已经死锁或死了。
定期触摸带有预选路径的文件。外部应用程序可以查看文件的时间戳,如果它是陈旧的,那么它可以假定应用程序已死或死锁。
您可以alarm
重复使用系统调用,让信号终止进程(相应地使用 sigaction)。只要您继续调用alarm
(即只要您的程序正在运行),它就会继续运行。一旦你不这样做,信号就会触发。
您可以在进程终止时无缝地重新启动进程,fork
如waitpid
本答案中所述。它不会花费任何大量资源,因为操作系统将共享内存页面。