下面一个程序limits.c实现了能够显示程序运行过程中优先级的显示和软硬看门狗的实现:
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void work()
{
FILE *f;
int i;
double x=4.5;
f=tmpfile();
for(i=0;i<10000;i++)
{
fprintf(f,"Do some output");
if(ferror(f)){
fprintf(stderr,"Error writing to temporary file\n");
exit(1);
}
}
for(i=0;i<1000000;i++)
x=log(x*x+3.21);
}
int main()
{
struct rusage r_usage;
struct rlimit r_limit;
int priority;
work();
getrusage(RUSAGE_SELF,&r_usage);
printf("CPU usage: User=%ld.%06ld, System=%ld.%06ld\n",r_usage.ru_utime.tv_sec,r_usage.ru_utime.tv_usec,r_usage.ru_stime.tv_sec,r_usage.ru_stime.tv_usec);
priority=getpriority(PRIO_PROCESS,getpid());
printf("Current priority=%d\n",priority);
getrlimit(RLIMIT_FSIZE,&r_limit);
printf("Current FSIZE limit:soft=%ld,hard=%ld\n",r_limit.rlim_cur,r_limit.rlim_max);
r_limit.rlim_cur=2048;
r_limit.rlim_max=4096;
printf("Setting a 2k file size limit \n");
setrlimit(RLIMIT_FSIZE,&r_limit);
work();
exit(0);
}
在linux命令行中:cc -o limits limits.c -lm
$:./limits
更改优先级:nice ./limits