web-dev-qa-db-ja.com

特定のユーザーのすべてのプロセスを誰でも強制終了できるようにする

共有サーバーでは、他のユーザー(ルート権限もない)がリソースを必要とするときはいつでも、優先度の低いユーザーのプロセスを強制終了できるように、非常に優先度の低いユーザーを用意します。

そのようなことを許可することは可能ですか?

15
Aslan986

他のユーザーにプロセスasを強制終了する許可を与え、優先度の低いユーザーに

Sudo -u lowpriouser /bin/kill PID

Root権限がない限り、ユーザーは自分のプロセスにのみシグナルを送ることができます。 Sudo -uを使用することにより、sudoersファイルに正しい設定がされているユーザーは、優先度の低いユーザーのIDを引き継ぎ、プロセスを強制終了する可能性があります。

例えば:

%killers ALL = (lowpriouser) /bin/kill

これにより、グループkillers内のすべてのユーザーが/bin/killlowpriouserとして実行できるようになります。

システムのsudoersマニュアルも参照してください。


OpenBSDシステムでは、ネイティブdoasユーティリティを使用して、次のような構成で同じことができます。

permit :killers as lowpriouser cmd /bin/kill

その後

doas -u lowpriouser /bin/kill PID

doas および doas.conf のマニュアルを参照してください。

24
Kusalananda

プロセスの優先度が低い場合は、リソースをほとんど消費しないため、プロセスを強制終了しないでください。

優先度を実際に低くするには、優先度を手動で変更するか、何年も前(1994年頃)にDEC OSF/1向けに書いたautoniceのようなデーモンを使用して、実行時間の長いジョブを探し、徐々に減らしていきます。彼らが優先するのは、彼らが長く走るほどです。

[〜#〜] edit [〜#〜]この機能を提供する and というパッケージがあります現代のユニスのために。

5
Alnitak

私はあなたが間違った角度から問題にアプローチすると思います:プロセスが低い優先度設定(CPU、I/O)で実行される場合、実行がスケジュールされないため、他のプロセスにあまり影響を与えないはずです。メモリ使用量に関しては、メインメモリがタイトであり、プロセスが長時間実行されるようにスケジュールされていない場合(CPUおよびI/Oの制約などにより)、「クリーン」ページが削除され、「ダーティ」ページがコミットされますまたはスワップアウトされ、他のプロセスのパフォーマンスに影響を与えなくなりました。

結論:適切な優先度設定と十分なスワップ領域があれば、優先度の低いジョブを強制終了して、より重要なタスクの「余地」を作る必要はありません。代わりに、カーネルは前者をスリープ状態にし、後者を優先します。

4
David Foerster