在某些情况下,我希望降低正在运行的进程优先级,以执行一个草率操作,然后将其增加到原始值。该进程应该自己执行,而不需要根权限。
我在Process.setpriority的红宝石应用程序中试过这样做。
这不是内核设计中的一个缺陷吗?
这里是shell中的一个例子:
$ nice
0然后
$ renice -n 19 -p $$
5094 (process' ID) old priority 0, new priority 19然后
$ renice -n 0 -p $$
renice: failed to set priority for 5094 (process' ID): Permission denied发布于 2014-05-25 22:00:17
通常只有根(或具有CAP_SYS_NICE特权的进程)可以将它们的“尼斯”更改为更高的优先级(较低的值)。但是自从2.6.12版本的内核(5.html)以来,linux引入了额外的方法来增加优先级(降低nice),RLIMIT_NICE限制(man )。您可以在bash中使用ulimit -e检查它,并在将(su)切换到普通用户或任何人(example)之前通过根用户进行更改。
那么,您能做些什么使您的流程暂时具有低优先级(更高的好值):
ulimit -e VALUE还是系统范围的/etc/security/limits.conf,项目nice ( pam_limits.so PAM模块使用这个配置,所以检查,在启动进程之前是否调用它。通常由登录名、*dm管理器、crond和atd调用。不知道是否调用了由init.d脚本启动的进程)两个来自brauliobo的第二个变体的例子,允许nice回到0,系统范围内。添加到/etc/security/limits.conf中
* soft nice 0 # ranges from -20 to 19或者使用sudo根目录来更改单个shell的RLIMIT_NICE:
sudo bash
ulimit -e 20 # equivalent to 0, as it ranges from 0 to 40
sudo -u youruser bash
# now you can renice back to 0如果没有root用户的帮助,您可以:
sched_yield。这将使其他进程能够提前抢占您的程序。https://stackoverflow.com/questions/23859522
复制相似问题