在Linux中有一个应用程序(用C ++编写)在后台运行了好几天,如果我向这个应用程序发送一些信号(使用kill -MYSIG
),要求应用程序执行一些已定义的操作,这可能会让我的系统没有像平常那样回应。通过不正常响应,我的意思是在我将此信号发送到应用程序后,系统shell(bash
)无法响应任何Linux命令(ls,ps,top
...),就像系统关闭时一样。如果我等了几分钟,系统又会回来。
我想知道导致系统停机或不正常响应的原因是什么?是应用程序使用过多的CPU还是内存?然后系统如何回来?
答案 0 :(得分:1)
Linux调度程序有一个状态,其中进程不响应信号(TASK_UNINTERRUPTIBLE
状态),发送到这样一个进程的信号保持排队直到进程离开不可中断状态,我猜这就是为什么你的原因无法杀死/发送信号到你的应用程序。如果是这种情况,请使用ps -A
并查看你的应用程序状态是否为D.如果是,那么你的应用程序/进程是在TASK_UNINTERRUPTIBLE。
可能由于缺少可用RAM,系统无响应。使用top
查看您的应用消耗了多少RAM /资源,请参阅%CPU
和%MEM
列。您还可以使用系统监视工具(例如:Gkrell)查看系统范围的资源使用情况。您可以降低应用程序优先级以减少其资源消耗。
如果您的应用有读/写/选择套接字调用,您应该使用strace / coredump来查看您的应用在大部分时间内花费的时间。这通常会发生如果选择处于紧急循环或您的应用执行了阻塞系统调用,如在socket上读/写
答案 1 :(得分:0)
您可以尝试为您的应用设置较低的优先级,除非它已经是最低优先级并仍然会导致问题。