共有サーバーでは、他のユーザー(ルート権限もない)がリソースを必要とするときはいつでも、優先度の低いユーザーのプロセスを強制終了できるように、非常に優先度の低いユーザーを用意します。
そのようなことを許可することは可能ですか?
他のユーザーにプロセスasを強制終了する許可を与え、優先度の低いユーザーに
Sudo -u lowpriouser /bin/kill PID
Root権限がない限り、ユーザーは自分のプロセスにのみシグナルを送ることができます。 Sudo -u
を使用することにより、sudoers
ファイルに正しい設定がされているユーザーは、優先度の低いユーザーのIDを引き継ぎ、プロセスを強制終了する可能性があります。
例えば:
%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
プロセスの優先度が低い場合は、リソースをほとんど消費しないため、プロセスを強制終了しないでください。
優先度を実際に低くするには、優先度を手動で変更するか、何年も前(1994年頃)にDEC OSF/1向けに書いたautonice
のようなデーモンを使用して、実行時間の長いジョブを探し、徐々に減らしていきます。彼らが優先するのは、彼らが長く走るほどです。
[〜#〜] edit [〜#〜]この機能を提供する and
というパッケージがあります現代のユニスのために。
私はあなたが間違った角度から問題にアプローチすると思います:プロセスが低い優先度設定(CPU、I/O)で実行される場合、実行がスケジュールされないため、他のプロセスにあまり影響を与えないはずです。メモリ使用量に関しては、メインメモリがタイトであり、プロセスが長時間実行されるようにスケジュールされていない場合(CPUおよびI/Oの制約などにより)、「クリーン」ページが削除され、「ダーティ」ページがコミットされますまたはスワップアウトされ、他のプロセスのパフォーマンスに影響を与えなくなりました。
結論:適切な優先度設定と十分なスワップ領域があれば、優先度の低いジョブを強制終了して、より重要なタスクの「余地」を作る必要はありません。代わりに、カーネルは前者をスリープ状態にし、後者を優先します。