繁体   English   中英

X秒后终止程序Linux C

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM