我想在低 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
设置进程的好值的上限值。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
,仅此而已。
笔记