Procesos agradables y secundarios

22

¿Alguien puede decirme cuál es la relación entre un nicenivel específico y procesos secundarios?

Por ejemplo, si tengo un valor predeterminado nicede 0, y comienzo un script con nice 5, que a su vez inicia algunos procesos secundarios (en este caso, aproximadamente 20 en paralelo), ¿cuál es el beneficio de los procesos secundarios?

NWS
fuente
1
Solo el usuario root puede disminuir la simplicidad de un proceso, y los procesos secundarios heredan el valor en cualquier forkimplementación sensata .
jw013
@ jw013 - Para mayor claridad, estoy haciendo scripts, usando &para generar procesos secundarios, no usando c& fork.
NWS
3
a menos que esté en un sistema operativo que no sea Unix / Linux, es una apuesta bastante segura con la que su shell genera procesos en segundo plano fork.
jw013

Respuestas:

28

Un proceso secundario hereda cualquier nicevalor que tenga el padre en el momento en que se bifurca (en su ejemplo 5).

Sin embargo, si el nicevalor del proceso primario cambia después de bifurcar los procesos secundarios, los procesos secundarios no heredan el nuevo nicevalor.

Puede observar esto fácilmente con la herramienta de monitoreo top. Si el nicecampo (NI) no se muestra por defecto, puede agregarlo presionando fy eligiendo I. Esto agregará la NIcolumna a la toppantalla.

* 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                                         

Buena información de man 2 fork

fork () crea un nuevo proceso duplicando el proceso de llamada. El nuevo proceso, denominado hijo, es un duplicado exacto del proceso de llamada, denominado padre, excepto por los siguientes puntos:

  • El hijo tiene su propia ID de proceso única, y este PID no coincide con la ID de ningún grupo de proceso existente (setpgid (2)).
  • La ID del proceso principal del niño es la misma que la ID del proceso principal.
  • El hijo no hereda los bloqueos de memoria de sus padres (mlock (2), mlockall (2)).
  • Las utilizaciones de recursos de proceso (getrusage (2)) y los contadores de tiempo de CPU (tiempos (2)) se restablecen a cero en el elemento secundario.
  • El conjunto de señales pendientes del niño está inicialmente vacío (señalización (2)).
  • El niño no hereda los ajustes del semáforo de su padre (semop (2)).
  • El hijo no hereda los bloqueos de registro de su padre (fcntl (2)).
  • El hijo no hereda los temporizadores de su padre (setitimer (2), alarm (2), timer_create (2)).
  • El hijo no hereda operaciones de E / S asíncronas pendientes de su padre (aio_read (3), aio_write (3)), ni hereda ningún contexto de E / S asíncrono de su padre (consulte io_setup (2)).
George M
fuente