No i dobrze słyszałeś. Masz limit RLIMIT_CPU który podawany jest w sekundach działania procesu z przydzielonym czasem procesora. To oznacza że jeżeli proces jest zorientowany na I/O, sam czas pracy procesu może być dłuższy bo proces jest usypiany w trakcie reakcji np. dysku czy sieci.
Masz 2 rodzaje limitów.
1. Twarde ustawia root i użytkownik nie może ich przekroczyć.
2. Miękkie gdzie użytkownik jest jedynie ostrzegany po osiągnięciu limitu.
Dla limitu RLIMIT_CPU, przy miękim proces otrzyma sygnał SIGXCPU a przy twardym ... SIGKILL :-/ Jak wiadomo po tym ostatnim .. kończy swój żywot. Jadnak SIGXCPU można obsłużyć.
Dokumentacja:
man 2 setrlimit
$ bash
$ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 12946
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 4096
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 12946
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
$ ulimit -aS
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 12946
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 12946
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
$ ulimit -St 3
$ ls -alR /
$ echo $?
152
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG <strong>24) SIGXCPU</strong> 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
$ exit
Po kolei dla komend (niestety nie potrafię ładnie pokolorować komend, są po prostu w kolejności wpisania czyli to co po $)
bo limity są dziedziczone przez następne powłoki.
limity twarde
limity miękkie
przestawienie miękkiego limitu czasu "na CPU" na 3 sek.
listowanie wszystkich plików w systemie
wyświetlenie kodu powrotu programu i powodu jego zatrzymania. Program zakończył się błędem bo kod nie jest zerowy, skończył się otrzymaniem sygnału bo 128 + NR_SYGNAŁU (tu 24 jak widzisz niżej).
wyświetlenie nr sygnałów
powrót do poprzedniej powłoki
W manualu masz przykład programu :-)