如何在C中关闭linux程序。我正在编辑一个脚本,以便有一个计时器,脚本只运行10秒然后关闭。
我正在运行的线路是: ./startmerge
将我下载的所有服务器文件合并在一起的C代码,但我只希望它运行10秒钟。
答案 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源代码并希望对其进行改进,请先阅读this和time(7)。在signal(7)发表评论时,请考虑Duck或alarm(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也很有用。