Niced процесс отдает приоритет дочернему процессу
Я дал наивысший приоритет процессу sshd, используя следующую команду:
nice -n -20 /sbin/sshd
Но он также будет иметь наивысший приоритет для дочернего процесса (/bin/sh) по умолчанию. Итак, возможно ли дать нормальный приоритет (0) дочернему процессу вместо наивысшего приоритета?
3 ответа
Невозможно дать нормальный приоритет дочернему процессу niced процесса, но мы можем назначить нормальный приоритет в коде до того, как родительский процесс разветвляется дочерним, таким образом мы можем назначить нормальный приоритет дочернему процессу.
Обратитесь setpriority для установки приоритета для любого процесса из кода
Предполагая, что этот sshd - OpenSSH v4.4 или новее, вы, вероятно, можете получить нужный эффект, установив для параметра ForceCommand в / etc / ssh / sshd_config что-то вроде:
ForceCommand nice -n 0 $SSH_ORIGINAL_COMMAND
Функция ForceCommand описана здесь. Вы также можете использовать блок Match (задокументированный в том же месте), чтобы изменить поведение для определенных портов, пользователей, IP-адресов и т. Д.
Основная проблема (не упомянутая в документации) заключается в том, что ForceCommand запускается в пользовательской оболочке ПОСЛЕ выполнения скриптов инициализации (например,.bashrc и т. Д.), Поэтому пониженный приоритет не будет применяться до тех пор, пока эти скрипты запуска не будут завершены (надеюсь, что это не так. делать что-то интенсивное вычисление...).
Попробуйте использовать хороший интерпретатор команд оболочки.
chsh -s "/usr/bin/nice -n 0 /bin/bash" username
Замените bash своей любимой оболочкой.
Это может привести к неожиданным результатам, поэтому, пожалуйста, оставьте дополнительный сеанс открытым в качестве опции восстановления.