c / unix:中止进程运行时间过长

时间:2010-09-02 20:09:15

标签: c unix process

我需要杀死这样的用户进程,这些用户进程花费的时间比UNIX(Solaris)操作系统上的预期时间长。这需要在当前正在执行的流程中完成。

请建议如何在C或UNIX中实现这一目标?

5 个答案:

答案 0 :(得分:7)

请参阅alarm()系统调用。它为您提供了一个SIGALRM信号,您的进程可以处理该信号并用于退出。

答案 1 :(得分:2)

只要在没有警告的情况下杀死加班过程是可以接受的,另一种方法是在启动过程时使用ulimit -t <time>

答案 2 :(得分:2)

使用setrlimit,您可以限制进程使用的CPU时间量。一旦超出限制,您的流程将收到SIGXCPU

#include <sys/resource.h>
struct rlimit limits = {42, RLIM_INFINITY};
setrlimit(RLIMIT_CPU, &limits);

答案 3 :(得分:0)

有一段时间我不得不解决同样的问题。

我的解决方案如下:

编写执行以下操作的控制器程序:

  1. 分叉启动您要控制的进程的子进程。
  2. 返回父级,分叉第二个子进程,该进程在允许的最长时间内休眠,然后退出。
  3. 在父母中,等待孩子完成,并以先完成为止导致父母杀死另一人。

答案 4 :(得分:-2)

有一种更简单的方法。启动工作线程来完成工作,然后在主线程中调用workerThread.join(timeoutInMS)。那将等待那么久。如果该语句返回且工作线程仍在运行,则可以将其终止并退出。