Process

ulimit -erenice之間的區別?

  • July 23, 2014

我想在 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只呼叫setrlimitsyscall 來改變 的值RLIMIT_NICE,僅此而已。

筆記

引用自:https://unix.stackexchange.com/questions/146035