web-dev-qa-db-ja.com

ニースと子プロセス

指定されたNiceレベルと子プロセスの関係は誰かに教えてもらえますか?

たとえば、0のデフォルトのNiceがあり、Nice 5でスクリプトを開始すると、いくつかの子プロセスが開始されます(この場合は約20並列)。子プロセスのニースは何ですか?

23
NWS

子プロセスは、フォークされたときに親が保持している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))は、子でゼロにリセットされます。
  • 子の保留中のシグナルのセットは、最初は空です(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)を参照)。
29
George M