我需要杀死这样的用户进程,这些用户进程花费的时间比UNIX(Solaris)操作系统上的预期时间长。这需要在当前正在执行的流程中完成。
请建议如何在C或UNIX中实现这一目标?
答案 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)
有一段时间我不得不解决同样的问题。
我的解决方案如下:
编写执行以下操作的控制器程序:
答案 4 :(得分:-2)
有一种更简单的方法。启动工作线程来完成工作,然后在主线程中调用workerThread.join(timeoutInMS)。那将等待那么久。如果该语句返回且工作线程仍在运行,则可以将其终止并退出。