Process
ulimit -e
和renice
之間的區別?
我想在 CPU 和磁碟 I/O 較低的情況下執行備份腳本。
這之間有什麼不同:
#!/bin/bash ulimit -e 19 ionice -c3 -p $$
還有這個:
#!/bin/bash ionice -c3 -p $$ renice -n 19 -p $$
他們之間有很大的不同。
ulimit -e
只設置,這是可以使用或RLIMIT_NICE
設置程序的 nice 值的上限值。setpriority``nice
renice
改變執行程序的優先級。做
strace
:$ cat test.sh #!/bin/bash ulimit -e 19
然後:
$ strace ./test.sh ................................................... read(255, "#!/bin/bash\n\nulimit -e 19\n", 26) = 26 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 getrlimit(RLIMIT_NICE, {rlim_cur=0, rlim_max=0}) = 0 getrlimit(RLIMIT_NICE, {rlim_cur=0, rlim_max=0}) = 0 setrlimit(RLIMIT_NICE, {rlim_cur=19, rlim_max=19}) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 read(255, "", 26) = 0 exit_group(0)
可以看到,
ulimit
只呼叫setrlimit
syscall 來改變 的值RLIMIT_NICE
,僅此而已。筆記