Processos agradáveis ​​e filhos

22

Alguém pode me dizer qual é a relação entre um nicenível especificado e os processos filhos?

Por exemplo, se eu tiver um padrão nicede 0, e eu começo um script com nice 5, que por sua vez inicia alguns processos filhos (neste caso cerca de 20 em paralelo), o que é o bom dos processos filhos?

NWS
fonte
1
Somente o usuário raiz pode diminuir a gentileza de um processo, e o valor é herdado pelos processos filhos em qualquer forkimplementação sensata .
Jw013
@ jw013 - Para maior clareza, estou usando scripts &para gerar processos filhos, não usando c& fork.
NWS
3
a menos que você esteja em um sistema operacional não-Unix / Linux, é uma aposta bastante segura que seu shell gera processos em segundo plano fork.
Jw013

Respostas:

28

Um processo filho herda qualquer nicevalor mantido pelo pai no momento em que é bifurcado (no seu exemplo 5).

No entanto, se o nicevalor do processo pai for alterado após bifurcar os processos filhos, os processos filhos não herdarão o novo nicevalor.

Você pode observar isso facilmente com a ferramenta de monitoramento top. Se o nicecampo (NI) não for mostrado por padrão, você poderá adicioná-lo pressionando fe escolhendo I. Isso adicionará a NIcoluna à topexibição.

* 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                                         

Boas informações de man 2 fork

fork () cria um novo processo duplicando o processo de chamada. O novo processo, chamado de filho, é uma duplicata exata do processo de chamada, chamado de pai, exceto pelos seguintes pontos:

  • O filho tem seu próprio ID de processo exclusivo e esse PID não corresponde ao ID de nenhum grupo de processos existente (setpgid (2)).
  • O ID do processo pai da criança é o mesmo que o ID do processo pai.
  • O filho não herda os bloqueios de memória de seus pais (mlock (2), mlockall (2)).
  • As utilizações de recursos do processo (getrusage (2)) e os contadores de tempo da CPU (vezes (2)) são redefinidos para zero no filho.
  • O conjunto de sinais pendentes da criança está inicialmente vazio (sigpending (2)).
  • A criança não herda ajustes de semáforo de seu pai (semop (2)).
  • O filho não herda bloqueios de registro de seu pai (fcntl (2)).
  • O filho não herda os cronômetros de seu pai (setitimer (2), alarme (2), timer_create (2)).
  • O filho não herda operações de E / S assíncronas pendentes de seu pai (aio_read (3), aio_write (3)), nem herda contextos de E / S assíncrona de seu pai (consulte io_setup (2)).
George M
fonte