共有サーバーでは、他のユーザー(ルート権限も持たない)がリソースを必要とする場合に、優先度の低いユーザーのプロセスを強制終了できるように、非常に優先度の低いユーザーが必要です。
そのようなものを許可することは可能ですか?
共有サーバーでは、他のユーザー(ルート権限も持たない)がリソースを必要とする場合に、優先度の低いユーザーのプロセスを強制終了できるように、非常に優先度の低いユーザーが必要です。
そのようなものを許可することは可能ですか?
回答:
他のユーザーに、優先度の低いユーザーとしてプロセスを強制終了する許可を与えます。
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
、現代のユニックスにこの機能を提供するというパッケージがあります。
あなたは間違った角度から問題にアプローチしていると思います:プロセスが低優先度設定(CPU、I / O)で実行されている場合、実行するようにスケジュールされないため、他のプロセスに大きな影響はありません。メモリ使用量に関しては、メインメモリが不足していて、プロセスが長時間実行されるようにスケジュールされていなかった場合(たとえば、CPUおよびI / Oの制約のため)、その「クリーン」ページはドロップされ、「ダーティ」ページがコミットされますまたは交換して、他のプロセスのパフォーマンスに影響を与えなくなりました。
結論:適切な優先度設定と十分なスワップスペースにより、より重要なタスクのための「余地」を作るために低優先度のジョブを殺す必要はないはずです。代わりに、カーネルは前者をスリープ状態にし、後者を優先するように注意します。