nice
レベル指定とサブプロセスの関係が何であるかを教えてくれる人はいますか?
たとえば、デフォルトがあり、nice
一部の子プロセス(この場合は約20個の並列プロセス)を開始する0
スクリプトを実行している場合、nice 5
子プロセスの利点は何ですか?
答え1
子プロセスは、nice
フォーク時に親プロセスが保持していたすべての値を継承します(あなたの例では5
)。
ただし、nice
子プロセスをフォークした後に親プロセスの値が変更された場合、子プロセスは新しいnice
値を継承しません。
モニタリングツールを使用すると、これを簡単に観察できますtop
。nice
フィールド(NI)がデフォルトで表示されない場合は、をf
押して選択して追加できますI
。これにより、ディスプレイNI
に列が追加されます。top
* I: NI = Nice value
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1937 root 20 0 206m 66m 45m S 6.2 1.7 11:03.67 X
良い情報が出ます。man 2 fork
fork()は呼び出しプロセスをコピーして新しいプロセスを作成します。新しいプロセス(サブプロセスと呼ばれる)は、以下を除いて呼び出しプロセス(親プロセスと呼ばれる)と同じです。
- 子プロセスには一意のプロセスIDがあり、このPIDは既存のプロセスグループ(setpgid(2))のIDと一致しません。
- 子プロセスの親プロセスIDは、親プロセスIDと同じです。
- 子は親のメモリロック(mlock(2)、mlockall(2))を継承しません。
- 子プロセスのプロセスリソース使用率(getrusage(2))とCPUタイムカウンタ(times(2))は0にリセットされます。
- 子の保留中の信号セットは最初は空です(sigpending(2))。
- 子は親(semop(2))からセマフォの調整を継承しません。
- 子は親からレコードロック(fcntl(2))を継承しません。
- 子プロセスは、親プロセスからタイマー(setitimer(2)、Alarm(2)、Timer_create(2))を継承しません。
- 子は、親から処理されていない非同期I / O操作(aio_read(3)、aio_write(3))を継承せず、親から非同期I / Oコンテキストも継承しません(io_setup(2)を参照)。