Axel Belinfante [Fri, 28 Sep 2012 14:53:24 +0000 (16:53 +0200)]
without this, i.e. with cpu soft limit == cpu hard limit
a process is immediately killed when the limit is reached;
on linux, at least:
  - when the soft limit is reached, but the hard limit is not reached yet,
    (every second)  a special 'cpu time exceeded' signal is sent,
  - the process is only killed when the hard limit is reached

thus, with this change, on linux, we may get nicer error messages
(when process is run via a shell: 'CPU time limit exceeded', instead of 'Killed')

linux.c

diff --git a/linux.c b/linux.c
index 1b3f9ba..ecc3b08 100644 (file)
--- a/linux.c
+++ b/linux.c
@@ -123,7 +123,8 @@ int set_mem_limit(unsigned long maxbytes)
 int set_cpu_limit(unsigned long maxseconds)
 {
        struct  rlimit rl;
+       long int hardlimit=(long int)maxseconds*1.05;
        rl.rlim_cur=maxseconds; 
-       rl.rlim_max=maxseconds;
+       rl.rlim_max=hardlimit;
        return setrlimit(RLIMIT_CPU,&rl);
 }