Answers:
授予其他用户作为低优先级用户的权限,以终止进程
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
kill
。还要注意,我建议使用用户组(killers
),而不是所有用户。
kill -HUP
,而不仅仅是发送kill -TERM
。
lowpriouser
。如果您想将信号限制为TERM
,则编写一个包装外壳脚本,/bin/kill
并允许人们使用而不是/bin/kill
。
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
您不应该杀死进程,如果它们的优先级较低,它们将消耗很少的资源。
要真正降低优先级,请手动更改其优先级,或使用类似 autonice
我多年前(约1994年)为DEC OSF / 1编写,查找长时间运行的作业,并随着运行时间的延长逐渐降低其优先级。
编辑有一个名为的软件包and
,为现代Unices提供此功能。
我认为您是从错误的角度解决问题的:如果某个进程以低优先级设置(CPU,I / O)运行,那么它不会对其他进程造成太大影响,因为它不会被安排运行。至于内存使用情况,如果主内存太紧并且该进程没有计划长时间运行(例如,由于CPU和I / O约束),则会删除其“干净”页面,并提交其“脏”页面或换出,不再影响其他流程的性能。
结论:有了正确的优先级设置和足够的交换空间,就没有必要杀死低优先级的工作来为更重要的任务腾出空间。取而代之的是内核会注意使前者处于休眠状态,而后者则处于有利地位。