在Linux上后台运行的程序变为stopped时
写了服务器程序camSvr。 在前台运行也没有问题。 使用命令./camSvr在后台运行,程序运行一段时间后,终端打印。 [1] stopped./camSvr
通过ps -ef命令查看时,程序仍在,但没有响应。 使用top命令验证状态是否为t,即stopped。
寻找原因的话,就是程序员中有从终端读取的代码。 对于《Unix 环境高级编程》部分9.8中的作业控制,“如果后台程序尝试读取终端,这不是错误,但终端驱动程序会检测到这一点,并向后台作业发送特定的信号SIGTTIN。 这个信号会停止后台程序,并通知用户”。
我的代码有两个脚本,一个脚本通过top命令获取cpu使用率,另一个脚本通过free命令获取内存使用率。 这两个脚本是必需的,不能删除。
最后使用重定向解决。/camSvr /dev/null
此外,在top调用期间,还会经常打印top :故障tty get错误。
寻找原因的话,在其他程序或脚本中以非对话模式调用top时就会出现。
解决方案是添加-b选项。 也就是说top -b。
- b : batch模式操作
start stop in’batch mode’,whichcouldbeusefulforsendingoutputfromtoptootherprogramsortoafile。
In this mode,topwillnotacceptinputandrunsuntiltheiterationslimityou’vesetwiththe’- n’command-lineoptionoruntilkillled。
参考: http://blog.csdn.net/a 2796749/article/details/53192940
33558 blog.chinaunix.net/uid-9554532-id-2000668.html