miércoles, 24 de junio de 2015

GESTION DE PROCESO

COMANDOS PARA GESTIONAR PROCESOS

Cada programa que se ejecuta es un proceso con recursos asignados y gestionado por el kernel.    La gestión de procesos comprende la monitorización, detención y cambio de prioridad de los procesos.
  •  MONITORIZACIÓN DE PROCESOS

Comando  PS (process success)

Sintaxis: ps [options]

Una entrada para los que se inician en el mundo Unix/Linux. El comando ps muestra por pantalla un listado de los procesos que se están ejecutando en el sistema. Si no añadimos ningún parámetro, ps mostrará los procesos del usuario con el que estamos logueados.
Esta orden admite opciones de las versiones ps propias de System V (precedidas por un guión), de BSD (sin guiones) y de GNU (precedidas por dos guiones).
Opciones del  comando ps:
  • -a, lista los procesos de todos los usuarios.
  • -A, ídem a la opción –e
  • -e, visualiza información sobre ”todos“ los procesos del sistema.
  • -f,  visualiza los parámetros con los que se levanto el proceso
  • –forest – Muestra el listado procesos en un formato tipo árbol que permite ver como los procesos interactúan entre sí, podría ser algo similar al comando pstree.
  • -j, visualiza información sobre el PGID y SID.
  • -l, formato largo. Muestra la prioridad, el pid del proceso padre entre otras informaciones(difiere al quitar el signo menos )
  • -N, niega el efecto de cualquier opción que se haya especificado.
  • -u, Lista información de procesos del usuario que lo está corriendo, la utilización de Cpu y memoria, etc.
  • -U usr, Lista los procesos creados por el usuario “usr”.
  • -x, muestra los procesos que no están asociados a ningún terminal del usuario. Útil para ver los “demonios” (programas residentes) no iniciados desde el terminal.
  • -eH, Muestra el árbol de procesos.
  • axf, Lo mismo en formato BSD.
  • -ec, El comando que se está ejecutando, sin la ruta, solo el nombre real.
  • -el, Muestra formato largo de varias columnas, muy práctico.
  • -el, No muestra procesos, lista todos los códigos de formatos.
Ejemplos de uso:

ps -u root -N, visualiza todos los procesos que no sean del usuario root.
ps -aux, visualiza información detallada de todos los procesos.

Comando PSTREE

Sintaxis:pstree [options] [PID | user]

Muestra los procesos en forma de árbol, pstree --help te da las opciones más comunes. Recomiendo uses lo uses con la opción -A y -G para que te un árbol con líneas con líneas estilo ASCII y de terminal VT100 respectivamente, puedes añadir también -u para mostrar entre paréntesis al usuario propietario del proceso:
Opciones:
-a Incluye en el árbol de procesos la línea de comandos que se usó para iniciar el proceso.
-c Deshabilita la unión de procesos hijos con el mismo nombre (réplicas de un mismo proceso).
-G Usa los caracteres de línea para dibujar el árbol. La representación del árbol es más clara, pero no funciona al re direccionar la salida.
-h Remarca la jerarquía del proceso actual (normalmente el terminal). No funciona al re direccionar la salida.
-n Por defecto los procesos con mismo padre se ordenan por el nombre. Esta opción fuerza a ordenar los procesos por su PID.
-p Incluye el PID de los procesos en el árbol.

Comando TOP 

Sintaxis: top [options]

El comando top ofrece una lista de los procesos similar al comando ps, pero la salida se actualiza continuamente. Es especialmente útil cuando es necesario observar el estado de uno o más procesos o comprobar los recursos que consumen.
                                               
Opciones: 

-i Ignora los procesos inactivos, listando únicamente los que utilizan recursos del sistema.
-d Especifica el ritmo de actualización de la pantalla en segundos. Es posible especificar decimales.

Ordenes interactivas:

h Muestra una pantalla de ayuda.
q Sale del programa.
kKill. Permite detener un proceso.
rRenice. Permite alterar la prioridad de un proceso.

  • TERMINAR PROCESOS.

A veces, es posible que necesite detener (terminar) un proceso. El proceso se puede encontrar en un bucle infinito. O bien, es posible que haya iniciado un trabajo grande que desea detener antes de finalizarlo. Puede terminar cualquier proceso propio. El súper usuario puede terminar cualquier proceso del sistema, excepto los procesos con ID de proceso 0, 1, 2, 3 y 4. Es muy probable que al terminar estos procesos, se produzca un fallo en el sistema.
Para obtener más información, consulte las páginas del comando man pgrep(1), pkill(1) y kill(1).

Terminar un proceso (KILL)

Kill es un comando unix/linux que permite enviar señales a uno o varios procesos del sistema a través de la shell (bash, ksh, etc). Las señales más utilizadas suele ser la de matar un proceso (9 ó SIGKILL), pararlo (TERM) o reiniciarlo (1 ó HUP) pero hay muchas más que pueden ser útiles.
Sintaxis:   kill [señal] [PID]
Donde:

Señal:es el valor entero o nombre de la señal que enviaremos al proceso. El valor de la señal se puede especificar en minúsculas o mayúsculas, pero normalmente se especifica en mayúsculas. Si se omite laseñal en el comando kill, toma por defecto el valor SIGTERM (señal 15, salir de manera correcta).
PID:Es el ID del proceso que desea terminar.
Dado que el comando kill termina procesos por su PID, las formas de conocer el PID del proceso es mediante el comando ps o el comando pidof el cual devuelve el PID del proceso.
El listado completo de señales disponibles puede visualizarse ejecutando kill -l:

$ kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT    4) SIGILL     5) SIGTRAP
 6) SIGABRT    7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT  17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG     24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM  27) SIGPROF    28) SIGWINCH   29) SIGIO      30) SIGPWR
31) SIGSYS     34) SIGRTMIN   35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

Ejemplos:
Para solicitar la finalización de un proceso
# kill 6574
Para finalizar varios  procesos
# kill 3454 3459 3750
Para forzar que uno o varios procesos terminen de forma inmediata (sin solicitar ni preguntar…) usamos la señal SIGKILL (9).
# kill -9 6574

Comando KILLALL

El comando killall, que funciona de manera similar a kill, pero con la diferencia de en vez de indicar un PID se indica el nombre del programa, lo que afectará a todos los procesos que tengan ese nombre. Asi por ejemplo si se tienen varias instancias ejecutándose del proxy server squid, con killall squid eliminará todos los procesos que se esten ejecutando con el nombre 'squid'                                                                                                                             
killall -u pepe tiene un comportamiento peligroso ya que mata todos los procesos del
usuario pepe, colgando el sistema si el usuario es el root.
killall -s USR1 dd enviar la señal USR1 al proceso dd
killall -9 dd termina el proceso dd proceso en forma forzosa.
killall -HUP httpd     (manda una señal de "colgar", detenerse releer sus archivos de
configuración y reiniciar)
killall -KILL -i squid (manda señal de matar a todos los procesos squid pero pide
confirmación en cada uno)

Ejemplo de salidas del comando killall -l

HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERMSTKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYSUNUSED

Comando PKILL

Este comando pkill utiliza grep para buscar todos los procesos que coincidan con el criterio especificado y les manda la señal SIGTERM.
pkillfire mataría tanto el proceso firefox como el proceso firebird, dado que la cadena fire aparece en ambos.

En caso que queramos terminar procesos por el nombre del proceso, se usa el comando killall y si queremos terminar procesos por el PDI se usa el comando kill


Consejo - Cuando se utiliza el comando pkill para terminar un proceso, primero, intente usar el comando por sí mismo, sin incluir una opción de señal. Espere unos minutos para ver si el proceso termina antes de utilizar el comando pkill con la señal -9.

Verifique que el proceso se haya terminado.

$ pgrep process
 El proceso terminado ya no se debería mostrar en el resultado del comando pgrep.



Comando NICE

Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa (proceso) con la prioridad modificada, más alta o más baja según se requiera. Las prioridades van de -20 (la más alta) a 19 la más baja. Solo root o el superusuario puede establecer prioridades negativas que son más altas. Con la opción -l de ps es posible observar la columna NI que muestra este valor.
  

Comando RENICE

Asi como nice establece la prioridad de un proceso cuando se incia su ejecución, renicepermite alterarla en tiempo real, sin necesidad de detener el proceso.

  • OTROS COMANDOS

NOHUP Y &

Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comandonohup o el operador & . Aunque realizan una función similar, no son lo mismo.
Si se desea liberar la terminal de un programa que se espera durará un tiempo considerable ejecutándose, entonces se usa . Esto funciona mejor cuando el resultado del proceso no es necesario mandarlo a la salida estándar (stdin), como por ejemplo cuando se ejecuta un respaldo o se abre un programa Xwindow desde la consola o terminal. Para lograr esto basta con escribir el comando en cuestión y agregar al final el símbolo & (ampersand).

$> yes > /dev/null &
$> tar czf respaldo /documentos/* > /dev/null/ &
$> konqueror & (con estos ejemplos se ejecuta el comando y se libera la terminal regresando el prompt)

Sin embargo lo anterior produce que el padre del proceso PPID que se invocó sea el proceso de la terminal en si, por lo que si cerramos la terminal o salimos de la sesión también se terminaran los procesos hijos que dependan de la terminal, no muy conveniente si se desea que el proceso continué en ejecución.
Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&' mandar el proceso y background y que este quede inmune a los hangups (de ahí su nombre nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecutó el proceso.
$> nohup yes > /dev/null &
$> nohup czf respaldo /documentos/* > /dev/null/ 
$> nohup konqueror

Asi se evita que el proceso se "cuelgue" al cerrar la consola.

Comando JOBS
Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios comandos que se ejecutarán por largo tiempo, se pueden entoncescomo ya se vió previamente con nohup y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la terminal y continuar trabajando.
Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eos tenemos el comando jobs que lista los procesos actuales en ejecución:
#> yes > /dev/null &
[1] 26837
#> ls -laR > archivos.txt &
[2] 26854
#> jobs
[1]-  Running                 yes >/dev/null &
[2]+  Running                 ls --color=tty -laR / >archivos.txt &

En el ejemplo previo, se ejecutó el comando yes y se envió a background (&) y el sistema devolvió [1] 26837, indicando asi que se trata del trabajo o de la tarea [1] y su PID, lo mismo con la segunda tarea que es un listado recursivo desde la raíz y enviado a un archivo, esta es la segunda tarea.
Con los comandos fg (foreground) y bg background es posible manipular procesos que esten suspendidos temporalmente, ya sea porque se les envió una señal de suspensión como STOP (20) o porque al estarlos ejecutando se presionó ctrl-Z. Entonces para reanudar su ejecución en primer plano usaríamos fg:

#> jobs
[1]-  Stopped                 yes >/dev/null &
[2]+  Stopped                ls --color=tty -laR / >archivos.txt &
#> fg %1
#> jobs
[1]+  Running                 yes >/dev/null &
[2]-  Stopped                ls --color=tty -laR / >archivos.txt &


Obsérvese como al traer en primer plano al 'job' o proceso 1, este adquirió el símbolo [+] que indica que esta al frente. Lo mismo sería con bg que volvería a reinicar el proceso pero en segundo plano. Y también es posible matar los procesos con kill indicando el número que devuelve jobs: kill %1, terminaría con el proceso en jobs número 1.



fuente:


 



No hay comentarios.:

Publicar un comentario