`ulimit -e` 和 `renice` 之间有什么不同?

`ulimit -e` 和 `renice` 之间有什么不同?

我想在低 CPU 和磁盘 I/O 的情况下运行备份脚本。

这之间有什么不同吗:

#!/bin/bash

ulimit -e 19
ionice -c3 -p $$

和这个:

#!/bin/bash

ionice -c3 -p $$
renice -n 19 -p $$

答案1

他们之间有很大的区别。

  • ulimit -e仅设置,它是可以使用或RLIMIT_NICE设置进程的好值的上限值。setprioritynice

  • 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,仅此而已。

笔记

相关内容