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

本文关键字:100% cpu 进程 守护 控制台 应用程序 Mono | 更新日期: 2023-09-27 18:24:57

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

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

它在树莓派上使用单声道完美运行(树莓喘息),但由于我与树莓杰西一起升级到了Pi 2,它在作为精灵启动时使用100%的cpu。

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

cd /myAppDir/
mono MyApp.exe &
exit 0

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

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

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

当作为守护程序启动时,它使用100%的cpu。

我不知道您是如何作为守护进程启动进程的,但通常情况下,守护进程会将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使用率