2

(注: 言及されたプログラムはクラスの課題のために書かれましたが、この質問は課題の一部ではありません。これは私自身の好奇心のためであり、他に答えを見つけることができません。)

クラスの割り当てのために、ユーザーが一度に実行できる同時プロセスの数を決定するプログラムを作成する必要がありました。私のプログラムはfork()、制限に達したために -1 を返す前に特定の数のプロセスを作成し、それらのプロセスを終了して終了します。

として実行するとroot、作成されたプロセスが 16 個カウントされてから終了します。これは理にかなっています。の Minix 2 のマニュアル ページでfork()は、制限が のNR_PROCS変数によって設定され、 /usr/include/minix/config.h32 に設定されていると指定されています。rootは、プログラムによって作成された 14 個のプロセスに加えて 16 個のプロセスを実行しているため (シェルとプログラム自体の場合は +2)、そのため、合計 32 プロセスになります。

ただし、特権のないユーザーとして実行するとast、プログラムは 13 のみを返します (したがって、11 のプロセスとシェルとプログラムの 2 つのプロセスのみが生成されます)。su astユーザーとして実行するために使用してastいますが、そのプロセスが考慮されているかどうかはわかりません。更新: as でログインするastと、プログラムが 12 のプロセスを生成するため、シェルとプログラム自体に 2 つを追加すると、ast14 の同時プロセスしか実行できないことを意味します (ユーザーは他のプロセスを実行していません)。

特に 1 つの変数だけがシステム制限を制御している場合に、スーパーユーザーと非特権ユーザーが実行できるプロセスの数に違いがあるのはなぜですか?

4

1 に答える 1

0

ユーザーのプロセス制限を設定すると、ユーザーによる誤用または悪意のある使用 ( fork bombなど) によってシステムが完全に破壊されないようにすることで (少なくとも理論上は)、システムが保護されます。ルート プロセスは引き続き起動して実行できます。

これは (他のユーザーを保護するため) ユーザーごとの設定である場合もあれば、(システムを保護するため) ユーザー/ルート分割である場合もあれば、両方である場合もあります。

于 2015-03-20T12:50:17.297 に答える