(注: 言及されたプログラムはクラスの課題のために書かれましたが、この質問は課題の一部ではありません。これは私自身の好奇心のためであり、他に答えを見つけることができません。)
クラスの割り当てのために、ユーザーが一度に実行できる同時プロセスの数を決定するプログラムを作成する必要がありました。私のプログラムはfork()
、制限に達したために -1 を返す前に特定の数のプロセスを作成し、それらのプロセスを終了して終了します。
として実行するとroot
、作成されたプロセスが 16 個カウントされてから終了します。これは理にかなっています。の Minix 2 のマニュアル ページでfork()
は、制限が のNR_PROCS
変数によって設定され、 /usr/include/minix/config.h
32 に設定されていると指定されています。root
は、プログラムによって作成された 14 個のプロセスに加えて 16 個のプロセスを実行しているため (シェルとプログラム自体の場合は +2)、そのため、合計 32 プロセスになります。
ただし、特権のないユーザーとして実行するとast
、プログラムは 13 のみを返します (したがって、11 のプロセスとシェルとプログラムの 2 つのプロセスのみが生成されます)。su ast
ユーザーとして実行するために使用してast
いますが、そのプロセスが考慮されているかどうかはわかりません。更新: as でログインするast
と、プログラムが 12 のプロセスを生成するため、シェルとプログラム自体に 2 つを追加すると、ast
14 の同時プロセスしか実行できないことを意味します (ユーザーは他のプロセスを実行していません)。
特に 1 つの変数だけがシステム制限を制御している場合に、スーパーユーザーと非特権ユーザーが実行できるプロセスの数に違いがあるのはなぜですか?