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

Mono console app as daemon take 100% cpu

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

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

它 运行 在 Raspberry Pi 上使用单声道(raspbian 气喘吁吁)非常完美,但自从我用 Raspbian Jessie 升级到 Pi 2 后,它使用 100% cpu 作为守护进程启动时。

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

cd /myAppDir/
mono MyApp.exe &
exit 0

我尝试了 nohup,with/without 最后 &,没有成功

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

it uses 100% cpu when started as a Daemon.

我不知道您如何将进程作为守护进程启动,但通常情况下,守护进程会将 stdin 重定向到 /dev/null

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

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

您只需要在完成 Main(string[] args) 之前执行此操作

private static void Main(string[] args)
{
     //call method for daemon before while
     while (true)
     {
          Thread.Sleep(1000);
     }
}

有了这个,您的应用不会占用 100% CPU 使用率