Sei sulla pagina 1di 41

Programación Aplicada

Clase 11: Manipulación de PROCESOS en LINUX


Nombre unidad de aprendizaje: Programación avanzada de
SCRIPTS

Escuela de
Informática y Telecomunicaciones
2008 Escuela de Informática y Telecomunicaciones, DuocUC
Escuela de Informática y Telecomunicaciones

Objetivos
 Objetivos de la clase

 Construye rutinas scripting Web de monitoreo


de proceso y eventos.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 2
Escuela de Informática y Telecomunicaciones

Desarrollo
Concepto de PROCESO
 La idea más generalmente aceptada acerca de
un PROCESO es la de programa en
ejecución.

Proceso:=Programa en ejecución

 En WINDOWS a los procesos se les denomina


TAREAS, en otros sistemas operativos se les
denomina TRABAJOS o JOBS.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 3
Escuela de Informática y Telecomunicaciones

Desarrollo
Concepto de PROCESO
 Los PROCESOS son entidades activas (se
están ejecutando) y los programas son
entidades pasivas (NO se están ejecutando,
NO tienen actividad), de aquí que:

Proceso≠Programa

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 4
Escuela de Informática y Telecomunicaciones

Desarrollo
Concepto de PROCESO
 Los PROCESOS son entidades abstractas que
el sistema operativo utiliza para controlar y
manipular la ejecución de los programas.
 Un PROCESO no es más que un programa o
aplicación cargado en memoria y
ejecutándose.
 Durante su existencia los procesos pueden
pasar por una serie de “estados” finitos, tal
como lo muestra la siguiente figura:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 5
Escuela de Informática y Telecomunicaciones

Desarrollo
Concepto de PROCESO

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 6
Escuela de Informática y Telecomunicaciones

Desarrollo
Manipulación de PROCESOS en LINUX
 En LINUX, el kernel o núcleo del sistema
asigna a los PROCESOS un número llamado
PID (Process ID o Process IDentification),
que permite la identificación única de dicho
PROCESO en el sistema.
 Aunque se podría pensar que sólo con el
nombre ya tendríamos suficiente para
identificar un PROCESO, es imprescindible
tener el PID, ya que podemos ejecutar un
PROCESO tantas veces como queramos.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 7
Escuela de Informática y Telecomunicaciones

Desarrollo
Manipulación de PROCESOS en LINUX
 Con lo anterior, vamos a tener varias instancias
del mismo PROCESO, pero cada una con un
PID distinto.
 En GNU/LINUX (al igual que en UNIX) el
comando ps (process status) permite obtener
información acerca del estado de los
PROCESOS de usuarios y del sistema.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 8
Escuela de Informática y Telecomunicaciones

Desarrollo
Información de los PROCESOS

[alumno@localhost ~]$ ps
PID TTY TIME CMD
8621 pts0 00:00:00 -bash
8745 pts0 00:00:00 ps
[alumno@localhost ~]$

 Como se puede ver el primer número es el PID


que el kernel del sistema le asigna al
PROCESO y en la columna CMD se puede ver
el nombre del PROCESO.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 9
Escuela de Informática y Telecomunicaciones

Desarrollo
Información de los PROCESOS
 TTY identifica la terminal o consola donde se
está ejecutando el PROCESO. La columna
TIME nos indica la cantidad de tiempo total que
el PROCESO se ha estado ejecutando.
 Al ser un comando estándar en todos los UNIX
y LINUX, ps soporta una buena cantidad de
parámetros y opciones especificadas en
versiones anteriores del comando.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 10
Escuela de Informática y Telecomunicaciones

Desarrollo
Información de los PROCESOS
 El parámetro -e devuelve un listado de todos
los procesos que se están ejecutando.
 El parámetro -f devuelve un listado extendido.
En este último caso veremos en pantalla el
PPID del proceso (identificador del proceso
padre) y la hora en la que se ejecutó el proceso
(STIME).

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 11
Escuela de Informática y Telecomunicaciones

Desarrollo
Información de los PROCESOS
 Los parámetros pueden aparecer juntos en el
mismo comando, es decir, podríamos llamar al
comando ps de la siguiente forma: ps –ef, de
esta manera obtendríamos un listado extendido
de todos los procesos que se están ejecutando
en el sistema.
 El parámetro -u lista información de los
procesos lanzados por un determinado usuario,
así, ps -u alumno, listará información de los
procesos que está ejecutando el usuario
alumno. © 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 12
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 Otro de los comandos de manipulación de
procesos en GNU/LINUX (y UNIX) es el
comando kill, asociado básicamente a la
acción de “matar” o terminar procesos.
 En términos técnicos, el propósito del comando
kill no es solamente “matar” o terminar un
proceso: el comando kill en realidad está
diseñado para enviar una SEÑAL (SIGNAL) a
un proceso.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 13
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 Aparte de informarnos sobre los PROCESOS,
el sistema operativo, más precisamente el
kernel del sistema operativo, nos permite
también enviarles señales para informarles de
algún evento: quitarlos de la cola de ejecución,
terminarlos, aumentar su prioridad, etc.
 Es decir, NO todas las señales pasadas con
kill son para “matar” o terminar PROCESOS.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 14
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 Hay dos formas básicas de terminar procesos:

kill <PID>
kill -9 <PID>

 Por defecto, la señal pasada al PROCESO en


la primera forma del comando es la señal 15,
denominada SIGTERM.
 SIGTERM se utiliza para “terminar” un
PROCESO.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 15
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 Con la primera forma informamos al proceso
(en el comando hay que especificar el PID del
PROCESO, no el nombre) que queremos que
termine, pero dejamos que guarde su
información y finalice de forma correcta.
 Con la segunda forma eliminamos el proceso
directamente de la cola de ejecución; se utiliza
cuando un proceso está “zombie”, colgado o
no responde, o simplemente está consumiendo
demasiada CPU en un momento determinado.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 16
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 De esta forma, la señal pasada al PROCESO
es la señal 9, denominada SIGKILL.
 Si queremos “matar” PROCESOS de forma
más cómoda, podemos usar el comando killall.
 Otro comando útil es skill que nos permite
enviar señales a los procesos de forma distinta.
Por ejemplo, si queremos detener todas las
ejecuciones de un determinado usuario
podríamos utilizar:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 17
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 skill -STOP -u <nombre_usuario>, con lo que
todos los procesos de dicho usuario
terminarían.
 Cuando estamos ejecutando un programa en
consola y queremos terminarlo, podemos
enviar directamente la señal SIGTERM con
<CTRL>+<C>, y podemos pausarlo con
<CTRL>+<Z> y devolverlo luego a primer
plano con fg.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 18
Escuela de Informática y Telecomunicaciones

Desarrollo
Matar/Terminar PROCESOS en LINUX
 En resumen, hay un total de 32 señales que se
pueden enviar a los procesos, sin embargo, las
más utilizadas son las siguientes:
•kill -1 (SIGHUP) para reiniciar un proceso.
•kill -9 (SIGKILL) para matar un proceso.
•kill -15 (SIGTERM) para terminar un
proceso.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 19
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Cuando emplea un comando para ejecutar un
programa, el intérprete de comandos espera
casi siempre a que el programa termine antes
de pedirle que use otro comando. Sin embargo,
podría ejecutar el comando para arrancar el
programa, esperar a que éste comenzase y
después pasar al comando siguiente de
inmediato. Para lograr esto, se teclea un
carácter “&” al final del comando.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 20
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Cuando el intérprete de comandos espera a
que un programa termine antes de solicitar que
se ejecute un comando nuevo, se dice que el
proceso está ejecutándose en el PLANO
PRINCIPAL. Cuando el intérprete arranca un
programa y después deja que se ejecute por sí
solo, se dice que el proceso está ejecutándose
en el PLANO SECUNDARIO (o ejecutándose
en “BACKGROUND”).
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 21
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Un programa se vuelve candidato para
ejecutarse en el PLANO SECUNDARIO en
caso de que NO necesite correr
interactivamente, esto es, si no es necesario
que lea desde el teclado o que escriba en la
pantalla.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 22
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Por ejemplo, suponga que un usuario quiere
ejecutar un programa que lee una gran
cantidad de datos de un archivo, los ordena y
después escribe la salida en otro archivo. No
hay razón para que este programa no pueda
trabajar por sí solo sin la intervención del
usuario, así es que debería usar:
sort<datos>resultado&.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 23
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Ejecutar el comando: ls>temp&, hará que el
comando ls se ejecute en el PLANO
SECUNDARIO y que la salida estándar se
redireccione hacia un archivo llamado temp.
 Al lanzar el PROCESO, nos aparece por
pantalla algo parecido a: [1] 2035, donde: [1]
es el número de trabajo de ese usuario y 2035
es el número de PROCESO o PID.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 24
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Cuando lanzamos un PROCESO en
SEGUNDO PLANO obtenemos un PID y un
número de trabajo. El PID, como ya hemos
mencionado, es el número de PROCESO y es
el método que utiliza el sistema operativo para
identificar de forma única al PROCESO. En
cambio el número de trabajo es un identificador
de uno o varios procesos correspondientes a
un usuario.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 25
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Anteriormente vimos que <CTRL>+<Z> detiene
(suspende) un PROCESO y lo deja en
SEGUNDO PLANO. También vimos como
podíamos enviarle un señal para que
continuara su ejecución en SEGUNDO
PLANO. Ahora lo que vamos ver son los
mecanismos para realizar una gestión más
completa de esos trabajos, a través de los
comandos fg y bg.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 26
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 La orden fg se utiliza para traer a PRIMER
PLANO un trabajo que está en SEGUNDO
PLANO, bien esté activo o bien esté detenido.
 La orden fg se usa como: fg [%num_trabajo].
 Hasta ahora hemos alternado entre un
PROCESO detenido y un PROCESO en primer
plano, y podíamos hacer que continuara
enviándole una señal.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 27
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Tenemos otra forma para hacer que un
PROCESO detenido en segundo plano
continúe su ejecución.
 La orden bg se utiliza para poner en ejecución
en segundo plano un trabajo que está en
segundo plano detenido y se utiliza como:
bg [%num_trabajo].

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 28
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Con la orden jobs podemos obtener una lista
de los trabajos que hemos “lanzado” en el
sistema. La orden jobs se utiliza como: jobs, y
al usarla nos aparece algo como:
[alumno@localhost ~]$ jobs
[1] Running sleep 100 &
[2] Running sleep 101 &
[3]- Running sleep 102 &
[4]+ Running sleep 103 &
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 29
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Donde entre corchetes tenemos el número de
trabajo, y los signos “+” y “-” indican que el
trabajo es el primero de la lista (+) y que el
trabajo es el segundo de la lista (-),
respectivamente.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 30
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 La orden nohup lanza un proceso y lo
independiza del terminal que estamos usando.
 Los PROCESOS se organizan de forma
jerárquica, de forma que si abandonamos la
SHELL que nos conectó al sistema
(abandonamos la sesión de trabajo)
automáticamente se matarán todos los
PROCESOS que dependan de ella.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 31
Escuela de Informática y Telecomunicaciones

Desarrollo
Ejecutar PROCESOS en PRIMER y
SEGUNDO PLANO
 Pero en muchas ocasiones nos puede
interesar lanzar un PROCESO y dejarlo en
ejecución aun cuando hayamos cerrado la
sesión de trabajo. Para esto se usa la orden
nohup, que presenta la siguiente sintaxis:
nohup orden [argumentos].

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 32
Escuela de Informática y Telecomunicaciones

Desarrollo
Cambiar prioridad a los PROCESOS
 Todos los PROCESOS en GNU/LINUX tienen
una PRIORIDAD.
 Esta PRIORIDAD permite ubicarlos en la cola
de procesos listos para que sean atendidos por
la CPU.
 El rango de prioridades va de -20 a 19, siendo
-20 la PRIORIDAD máxima.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 33
Escuela de Informática y Telecomunicaciones

Desarrollo
Cambiar prioridad a los PROCESOS
 Por defecto, la PRIORIDAD con que se
ejecutan los PROCESOS es 0.
 Para “lanzar” un PROCESO con una
determinada PRIORIDAD utilizamos el
comando nice. Si queremos cambiar la
PRIORIDAD de un PROCESO en ejecución
utilizaremos el comando renice.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 34
Escuela de Informática y Telecomunicaciones

Desarrollo
Cambiar prioridad a los PROCESOS
 Sólo el usuario root puede utilizar el rango de
prioridades negativas, así el sistema se
asegura que root siempre pueda ejecutar
PROCESOS más rápidamente que el resto de
los usuarios.
 Un aspecto a considerar es que no podemos
medir directamente el tiempo de ejecución de
un PROCESO, ya que éstos se van alternando
en la cola de ejecución hasta que terminan; no
se ejecutan todos de una sola vez.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 35
Escuela de Informática y Telecomunicaciones

Desarrollo
Cambiar prioridad a los PROCESOS
 Para medir el tiempo de ejecución real de un
PROCESO podemos “lanzarlo” añadiendo
antes del comando la palabra time.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 36
Escuela de Informática y Telecomunicaciones

Desarrollo
Los PROCESOS, sus propietarios y sus
permisos
 En los sistemas operativos GNU/LINUX, los
PROCESOS pertenecen al usuario que los
“lanzó”. Asimismo, se ejecutan con los mismos
permisos que tiene ese usuario.
 Esta es una medida de seguridad bastante
importante, ya que así otros usuarios no
podrán terminar procesos que no les
pertenezcan.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 37
Escuela de Informática y Telecomunicaciones

Desarrollo
Los PROCESOS, sus propietarios y sus
permisos
 Asimismo, un PROCESO presuntamente
maligno lanzado por un usuario, no afectaría al
sistema ni a otros usuarios, ya que el usuario
que lo lanzó no tiene los permisos necesarios
para “afectar” el sistema.
 Esta es una de las razones por la que existen
realmente pocos virus efectivos en los
sistemas operativos basados en UNIX/LINUX.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 38
Escuela de Informática y Telecomunicaciones

Desarrollo
Los PROCESOS, sus propietarios y sus
permisos
 Un virus no es más que un proceso lanzado
por el usuario infectado, y como tal, sólo tiene
los permisos que pueda tener el usuario, así
que no comprometería la seguridad del sistema
ni a otros usuarios.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 39
Escuela de Informática y Telecomunicaciones

Resumen
 Resumen de la clase

 La idea mas generalmente aceptada acerca de un PROCESO es la de


programa en ejecución.
 Un PROCESO no es más que un programa o aplicación cargado en
memoria y ejecutándose. Sin embargo, un PROCESO es mucho mas que
un programa en memoria y sobre todo en la clase de sistema operativo
que nos compete, con sus funciones de multiusuario y multitarea como lo
son los sistemas UNIX/LINUX.
 En LINUX, el kernel o núcleo del sistema asigna a los PROCESOS un
número llamado PID, que permite la identificación única de dicho
PROCESO en el sistema.
 PID identificación del proceso, PPID identificación del proceso padre.
 En GNU/LINUX el comando ps permite obtener información acerca de los
PROCESOS de usuarios y del sistema.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 40
Escuela de Informática y Telecomunicaciones

Resumen
 Resumen de la clase

 El comando kill no solo permite “matar” un proceso; el comando kill en


realidad está diseñado para enviar una SEÑAL (SIGNAL) a un proceso.
Entre las señales posibles esta la señal de “matar” un proceso: SIGKILL,
la de terminar un proceso: SIGTERM, entre otras.
 Un proceso puede ejecutarse en PRIMER PLANO o bien en SEGUNDO
PLANO.
 Todos los PROCESOS en GNU/LINUX tienen una PRIORIDAD, esta
PRIORIDAD permite ubicarlos en la cola de procesos listos para que
sean atendidos por la CPU.
 En los sistemas operativos GNU/LINUX, los PROCESOS pertenecen al
usuario que los “lanzó”. Asimismo, se ejecutan con los mismos permisos
que tiene ese usuario.

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 41

Potrebbero piacerti anche