我用c编写了一个用于嵌入式系统的程序(Devkit8000,它是着名的BeagleBoard的克隆版),运行Angstrom Linux。
程序创建了几个线程,其中负责用连接到板的相机拍照,而现在第二个线程只将图像移动到另一个路径。该程序应该在一整天内运行,唯一的方法就是发送信号。
我编辑了crontab以在特定时间启动程序并在必须停止时发送信号,问题是以这种方式启动程序会导致进程在运行一段时间后被终止,但是,如果我手动启动程序(通过命令行),它运行正常,不会停止。
我不知道crontab和命令行之间这种不同行为的原因。我检查了系统日志,但没有找到任何有用的东西。我也一直在阅读一下,发现操作系统可以在使用如此多的资源时终止进程,但没有理由只在1个场景中发生这种情况(crontab vs手动)......
有关正在发生的事情的任何线索?
提前谢谢!
答案 0 :(得分:0)
主要区别在于通过cron运行作业会调用非交互式非登录shell。其效果取决于您的用户的默认shell。例如,如果您使用的是Korn shell或Bash,那么您的.profile将不会像在交互式登录shell上那样执行。 Korn shell 88将执行.kshrc($ ENV文件),但ksh93不会。 因此,一个好的开始可能是在首次“获取”.profile文件之后从脚本调用您的程序:
. $HOME/.profile
失败......当你说这个过程被“杀死”时,你会收到这样的消息吗?如果是这样,那听起来像是发送SIGKILL的人,即kill -9
。如果没有,那么也许你可以运行strace或ltrace来找出它何时死亡。