作为守护进程的单声道控制台应用程序占用100%cpu

时间:2015-11-27 14:28:31

标签: c# mono

我有一个控制台应用程序(我知道它应该是一个服务),最后有一个循环,所以它永远不会停止:

while (true)
{
    Console.ReadLine();
}

它在使用mono(raspbian wheezy)的Raspberry Pi上完美运行但是自从我用Raspbian Jessie升级到Pi 2后,它在作为守护进程启动时使用100%cpu。

似乎Readline()总是返回一个空行。任何的想法?我的init.d脚本非常简单,可用于测试目的:

cd /myAppDir/
mono MyApp.exe &
exit 0

我尝试使用nohup,最后使用&,但没有成功

[编辑] 因为我有一个定时器池,所以我不能使用Thread.Sleep。一个简单的解决方案是为所有工作创建另一个线程,并在主线程中执行Sleep,但我想理解为什么它不能像这样工作

2 个答案:

答案 0 :(得分:2)

  

在作为守护进程启动时使用100%cpu。

我不知道你是如何开始一个守护进程的,但通常守护进程会将stdin重定向到/dev/null

Null设备立即产生EOF,因此Console.ReadLine()永远不会阻止。

我猜(我没有Raspbian),运行守护进程的方式从Raspbian Wheezy改为Jessie。

答案 1 :(得分:0)

您只需要在完成Main(string [] args)

之前就需要这样做。
private static void Main(string[] args)
{
     //call method for daemon before while
     while (true)
     {
          Thread.Sleep(1000);
     }
}

使用此方法,您的应用不会占用100%的CPU使用率