在共享服务器上,我希望有一些非常低优先级的用户,这样每当其他用户(也没有root权限)需要资源时,他们就可以杀死任何低优先级用户的进程。
可以允许这样的事情吗?
答案1
授予其他用户终止进程的权限作为低优先级用户通过
sudo -u lowpriouser /bin/kill PID
用户只能向自己的进程发出信号,除非他们具有 root 权限。通过使用文件sudo -u
中正确设置的用户,sudoers
可以假定低优先级用户的身份并终止进程。
例如:
%killers ALL = (lowpriouser) /bin/kill
killers
这将允许组中的所有用户/bin/kill
以lowpriouser
.
另请参阅sudoers
系统手册。
在 OpenBSD 系统上,可以通过本机doas
实用程序完成相同的操作,配置如下
permit :killers as lowpriouser cmd /bin/kill
然后
doas -u lowpriouser /bin/kill PID
答案2
您不应该终止这些进程,如果它们的优先级较低,它们将消耗很少的资源。
要真正降低它们的优先级,要么手动更改它们的优先级,要么使用像autonice
我多年前(c.1994)为 DEC OSF/1 编写的守护进程,该守护进程会查找长时间运行的作业,并随着运行时间的延长逐渐降低它们的优先级。
编辑有一个包叫and
为现代的 Unices 提供了这个功能。
答案3
我认为您从错误的角度处理这个问题:如果一个进程以低优先级设置(CPU、I/O)运行,它不会对其他进程产生太大影响,因为它不会被安排运行。至于内存使用,如果主内存紧张并且进程没有安排长时间运行(例如由于CPU和I/O限制),则其“干净”页面将被删除并提交其“脏”页面或被换出并且不再影响其他进程的性能。
结论:通过正确的优先级设置和足够的交换空间,应该没有必要杀死低优先级作业来为更重要的任务腾出“空间”;相反,内核会注意让前者进入睡眠状态,以利于后者。