Operating system 什么能使系统停止?

Operating system 什么能使系统停止?,operating-system,Operating System,Linux中有一个应用程序(用C++编写)在后台运行数天,如果我向这个应用程序发送一些信号(使用kill-MYSIG),要求该应用程序执行一些定义的操作,这可能会使我的系统无法正常响应。不正常响应是指在我将此信号发送到应用程序后,系统外壳(bash)无法响应任何Linux命令(ls、ps、top…),就像系统关闭时一样。如果我等几分钟,系统会再次返回 我想知道是什么原因导致系统崩溃,还是无法正常响应?是应用程序使用了太多的CPU或内存吗?那么系统是如何恢复的呢?你可以尝试给你的应用程序一个较低的

Linux中有一个应用程序(用C++编写)在后台运行数天,如果我向这个应用程序发送一些信号(使用
kill-MYSIG
),要求该应用程序执行一些定义的操作,这可能会使我的系统无法正常响应。不正常响应是指在我将此信号发送到应用程序后,系统外壳(
bash
)无法响应任何Linux命令(
ls、ps、top
…),就像系统关闭时一样。如果我等几分钟,系统会再次返回


我想知道是什么原因导致系统崩溃,还是无法正常响应?是应用程序使用了太多的CPU或内存吗?那么系统是如何恢复的呢?

你可以尝试给你的应用程序一个较低的优先级,除非它已经是最低优先级,并且仍然会导致问题


Linux调度程序具有进程不响应信号的状态(
任务不可中断
状态),发送到该进程的信号保持排队,直到进程离开不可中断状态,我想这就是为什么你不能杀死/发送信号到你的应用程序的原因。如果是这种情况,请使用
ps-A
并查看你的应用程序的状态是否为D。如果是这样,那么你的应用程序/进程处于任务\u不可中断状态

可能由于缺少可用RAM,系统没有响应。使用
top
查看应用程序消耗了多少RAM/资源,请参阅
%CPU
%MEM
列。您还可以使用系统监视器工具(例如:Gkrell)查看系统范围内的资源使用情况。您可以降低应用程序的优先级以减少其资源消耗


如果你的应用程序有读/写/选择套接字调用,你应该使用strace/coredump来查看你的应用程序大部分时间都花在哪里。如果select处于紧循环中,或者你的应用程序执行了阻塞系统调用(如套接字读/写),如果应用程序没有最低优先级,通常会发生这种情况,那么,这怎么可能使系统不响应我的shell命令呢?如果您发布接收到kill信号时运行的代码段,那么其他人可能更容易给出更具体的响应。例如,在这段时间内是否写入了任何数据?问题是,我能够发送
kill
信号,应用程序能够接收到它,但在此之后,系统无法对我键入的任何命令做出任何响应,包括
ps,top,ls
…先运行top,然后启动你的应用程序,我想它会让你知道你的应用程序是否消耗了太多的内存/资源。同时运行gdb,看看发送信号后会发生什么。浏览一下你的应用程序,就会发现你的应用程序所进行的所有系统调用,我猜每个调用所花费的时间。这可能会帮助你理解经济放缓的原因。