我有一个控制台应用程序(我知道它应该是一项服务),最后有一个循环,所以它永远不会停止:
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,因为我有一个Timer池在UART中。一个简单的解决方案是为所有工作创建另一个线程,然后在主线程中执行Sleep,但是我想了解为什么它不能像这样工作
作为守护程序启动时使用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使用率