我有一个控制台应用程序(我知道它应该是一个服务),最后有一个循环,所以它永远不会停止:
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,但我想理解为什么它不能像这样工作
答案 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使用率