[英]Terminate program after X seconds Linux C
我如何在C语言中关闭Linux程序。我正在编辑脚本以使其具有计时器功能,其中脚本仅运行10秒钟,然后关闭。
我正在运行的行是:./startmerge
这是一个C代码,用于将我下载的所有服务器文件合并在一起,但我只希望它运行10秒钟。
如果大部分的时间都花在计算与CPU(换句话说,如果10秒钟./startmerge
未在IO花),那么你要限制CPU的时间,所以使用了setrlimit(2)系统调用与RLIMIT_CPU
。 在bash中,您要使用其内置的ulimit
(调用setrlimit
syscall),请参见以下答案 ,例如
ulimit -t 10
在运行startmerge
之前。
如果您startmerge
不是CPU密集型,要kill
10秒后,也许(见本 )
startmerge & ; pidof_startmerge=$!
sleep 10; kill $pidof_startmerge
更好的是,使它成为一个循环(例如,围绕sleep 1
循环十次)
如果您可以访问startmerge
的C源代码并希望对其进行改进,请阅读first time(7)和signal(7) 。 正如Duck所说,考虑使用alarm(2)或setitimer(2)或timer_create(2)并设置一个信号处理程序-例如,带有sigaction(2)的 SIGALRM
(但不要忘记,信号处理程序仅限于调用异步信号-safe功能而已;你可以设置一个全球性的volatile sig_atomic_t
在这些变量中,外测试变量)。 如果您的startmerge
有一些基于某些复用syscall的事件循环 ,例如poll(2) (或旧的select(2)
),它甚至应该更简单,并且Linux专用的timerfd_create(2)可能会非常有帮助。
您可以将SIGALRM
捕获在bash中,请参阅此 。
高级Linux编程中有一些与您的问题相关的章节。 高级Bash编程指南对于阅读也很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.