X秒Linux C后终止程序

时间:2013-12-22 05:34:38

标签: c linux timer timeout

如何在C中关闭linux程序。我正在编辑一个脚本,以便有一个计时器,脚本只运行10秒然后关闭。

我正在运行的线路是: ./startmerge

将我下载的所有服务器文件合并在一起的C代码,但我只希望它运行10秒钟。

1 个答案:

答案 0 :(得分:3)

如果大部分时间花在使用CPU进行计算上(换句话说,如果./startmerge中的10秒没有花费在IO上)那么你想限制CPU时间,所以使用{{ 3}}带有RLIMIT_CPU的系统调用。在bash中,您希望使用其ulimit内置(调用setrlimit系统调用),请参阅setrlimit(2),如

  ulimit -t 10

在运行startmerge之前。

如果您的startmerge不是CPU密集型的,那么您可能希望在10秒后kill(请参阅this answer

  startmerge & ; pidof_startmerge=$!
  sleep 10; kill $pidof_startmerge

更好的是,将其设为循环(例如,在sleep 1周围循环十次)

如果您有权使用startmerge的C源代码并希望对其进行改进,请先阅读thistime(7)。在signal(7)发表评论时,请考虑Duckalarm(2)setitimer(2)并设置信号处理程序-e.g. for SIGALRM with timer_create(2)(但不要忘记信号处理程序仅限于调用 async-signal-safe 函数;您可以设置全局volatile sig_atomic_t变量在其中,并在外面测试该变量)。如果您的startmerge基于某些多路复用系统调用(sigaction(2)(或旧的select(2))有一些event loop,那么它应该更简单,并且特定于Linux poll(2)可能会非常有帮助。

您可以在bash中捕获SIGALRM,请参阅timerfd_create(2)

this有一些与您的问题相关的章节。 Advanced Linux Programming也很有用。