我使用以下命令给予 sshd 进程最高优先级:
nice -n -20 /sbin/sshd
但默认情况下,它也会给子进程(/bin/sh)最高优先级。那么,是否可以将正常优先级(0)赋予子进程而不是最高优先级?
假设这个 sshd 是 OpenSSH v4.4 或更高版本,您可能可以通过将 /etc/ssh/sshd_config 中的 ForceCommand 选项设置为类似以下内容来获得所需的效果:
ForceCommand nice -n 0 $SSH_ORIGINAL_COMMAND
此处记录了 ForceCommand 功能。您还可以使用匹配块(记录在同一位置)来修改某些端口、用户、IP 地址等的行为。
主要问题(文档中未提及)是 ForceCommand 在执行初始化脚本(例如 .bashrc 等)之后在用户的 shell 上运行,因此在这些启动脚本完成之前,降低的优先级将不适用(希望那些不是做任何计算密集型的事情......)。
不可能为niced进程的子进程赋予正常优先级,但我们可以在父进程分叉子进程之前在代码中分配正常优先级,这样我们就可以为子进程分配正常优先级。
请参阅setpriority以从代码中为任何进程设置优先级
尝试使用漂亮的shell命令解释器。
chsh -s "/usr/bin/nice -n 0 /bin/bash" username
用你最喜欢的 shell 替换 bash。
这样做你可能会得到意想不到的结果,所以请保持一个额外的会话打开作为恢复选项。