如果运行优先级较高的程序,为什么所有Linux终端都会挂

时间:2015-04-08 10:05:57

标签: linux multithreading terminal centos

我正在运行一些使用2个线程的控制台程序 - main和worker。主线程启动worker,等待用户输入(“按ENTER退出”),然后终止worker并退出。工作线程100%的时间处理数据。

如果从本地终端控制台运行该程序,则一切正常:

./MyProg

但如果以CPU亲和力和更高的优先级运行它会变得很奇怪:

taskset -c 8 chrt -r 20 ./MyProg

在这种情况下,终端的响应速度会明显降低,并且在一段时间(2-3分钟)后最终会挂起(停止更新屏幕并按下按键)。我的程序没有挂起,它继续正确处理数据,由于无法对用户键盘输入做出反应而无法退出。此外,没有任何其他程序在运行(除了少数终端实例)。

另一个令人尴尬的事情是所有(运行和新开的)终端都开始遇到同样的问题。同时Gnome GUI没有!它完美无瑕地工作,打开任何菜单/对话框/ GUI程序,没有任何明显的延迟。

所以问题是:

  • 为什么Linux终端有这种奇怪的行为?
  • 所有终端实例是否共享某些全局资源,例如线程或同步对象?
  • 如何避免这种情况(操作系统调整,程序重新设计)?

使用的分配是CentOS 6 x64,uname -a结果是:

Linux leopard 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux

CPU是Intel Xeon,逻辑核心数是12。

0 个答案:

没有答案