linux Niced流程将其优先级赋予子流程

zc0qhyus  于 2023-01-16  发布在  Linux
关注(0)|答案(3)|浏览(122)

我使用以下命令为sshd进程赋予了最高优先级:

nice -n -20 /sbin/sshd

但是默认情况下也会给予子进程(/bin/sh)最高优先级,那么,有没有可能给子进程普通优先级(0)而不是最高优先级呢?

omhiaaxx

omhiaaxx1#

假设这个sshd是OpenSSH v4.4或更高版本,您可以通过将/etc/ssh/sshd_config中的ForceCommand选项设置为如下内容来获得所需的效果:

ForceCommand nice -n 0 $SSH_ORIGINAL_COMMAND

ForceCommand功能在here中有说明。您还可以使用Match块(在同一位置有说明)修改某些端口、用户、IP地址等的行为。
主要的问题(文档中没有提到)是,ForceCommand在初始化脚本(例如,bashrc等)执行之后在用户的shell上运行,所以降低的优先级不会应用,直到这些启动脚本完成(希望这些脚本没有做任何计算密集型的事情...)。

dkqlctbz

dkqlctbz2#

不可能给niced进程的子进程给予普通优先级,但是我们可以在子进程的fork()之后exec()之前的父进程代码中指定普通优先级,这样我们就可以给子进程指定普通优先级。
参考setpriority设置代码中任何进程的优先级

wlp8pajw

wlp8pajw3#

尝试使用niced shell命令解释器。

chsh -s "/usr/bin/nice -n 0 /bin/bash" username

用您喜欢的shell替换bash。
这样做可能会得到意外的结果,所以请保持一个额外的会话打开作为恢复选项。

相关问题