Linux LPI1 – Apuntes II

Sigo introduciendo mis apuntes de las clases de la LPI – 1. Aún tengo varios días que pasar de apuntes y más me vale hacerlo rápido, porque se me acumula la faena. Lo bueno de hacer esto es que te das cuentas de los pequeños detalles que quedaron sin comprender y refuerza en la memoria ciertos conceptos.

El proceso hit, es el proceso padre de UNIX. Los procesos tienen
jerarquía y parentesco, credenciales y ficheros abiertos.UID y GID son credenciales:

UID – usuario que ejecutó el proceso
GID – grupo que ejecutó el proceso

Un proceso hijo hereda las credenciales del padre. Comentamos brevemente el comando lsof(List Open Files), lista de ficheros abiertos por un proceso:

#lsof -p1 lista de ficheros abiertos por el proceso de PID 1. Hablamos ahora del comando ps.ps se utiliza para mostrar los procesos del sistema. Si ejecutamos ps axuf vemos una buena muestra de lo que ocurre en el sistema y obtenemos una serie de valores a simple vista:

  • USER: realmente el UID es numérico, pero lo consulta en el archivo /etc/password y lo traduce
  • PID: identificador numérico único en el sistema
  • CPU%: cpu consumida durante el momento en hacer ps
  • MEM: lo mismo. Memoria relativa
  • VSZ: virtual size
  • RSM: memoria residente. Memoria real que ocupa a nivel físico.
  • Tramas del núcleo: salen en la lista de procesos y se muestra entre corchetes. ¡No se pueden “matar”!
  • STAT: estado de procesos
  • TTY: (teletipo / terminal) Su símbolo “?” muestra que la salida del proceso no va a ninguna parte. Un valor “pts/0” indica la pseudo-terminal número 0. “R” significa running.”r” es ready, ya que, el ps muestra los procesos que esperan su turno para ser procesados.”U”, uninterrupt(no se puede eliminar este proceso).”T” o “||”, pausa. “Z” de zoombie, proceso en espera de morir.
  • TIME: ciclo de tiempo dedicado a la CPU.

Otro comando similar es pstree, que muestra lo mismo que ps pero en forma de árbol.

Otro comando importante es top. Top muestra información muy útil sobre el comportamiento del sistema en todo momento. Muestra la carga de trabajo del sistema operativo con 3 valores, por ejemplo:

Load Average: 0,00; 0,15; 0,23

Los valores muestran la carga del sistema en los últimos 5 minutos, los últimos 10 y los últimos 15. Con esto se puede tener una idea sobre la evolución de la carga de trabajo en el so. Los estados de la cpu muestran diversos parámetros de la cpu, como us(user), sy(sistema) o id. Hay 2 campos a tener también en cuenta como nice o pr:

  • NICE: valoración del proceso según el so. Cuanto más alto sea este valor, más desagradable es para el rendimiento del so, y por tanto menos prioridad recibe. Oscila entre -20 y +19.
  • PR: prioridad. Calculo hecho según varios parámetros. Procesos con carga de I/O Bound(apache, vi)reciben más prioridad que procesos I/O Cpu como gcc.

SEÑALES

Después de ver como obtener información sobre los procesos, hablamos sobre la comunicación entre estos procesos. Podemos ver todas las señales con kill -l. Sólo se envían señales a procesos con la misma credencial, menos root que lo envía a todos(si nos somos root, no podemos enviar señales a procesos de root). Kill significa enviar señal y es un built-in del bash. Cuando ejecutamos kill -1 [PID] estamos enviando una señal SIGHUP, que hace recargar el fichero de configuración al proceso en cuestión. Otro programa parecido es killall. Ejemplos de tipos de señales:

  • #kill -9 -u (user)
  • #kill -1 [PID]; recarga el fichero de configuración(si tiene fichero de configuración)
  • #kill -15 [PID]; SIGTERM
  • #kill -9 [PID]; SIGKILL
  • #kill -19[PID]; TSTOP

Otros comandos relacionados son:

  • nohup: ejecutamos un comando sin tener en cuenta la señal 1(SIGHUP).
  • fg: fg 1, ponemos en primer plano el job 1.
  • bg: enviamos al background para el proceso job.

¿Cómo podemos cambiar la prioridad de los procesos? Utilizando el comando nice. Realmente no modificamos la prioridad sino que sugerimos al so, lo que debe priorizar el proceso.

nice -19 ps ; prioridad positiva para ps.
nice –20 ps; prioridad negativa para ps.

PIPES

Podríamos traducir pipe como canal(aunque se le conoce más por tubo). Una pipe es un fichero abierto. Por defecto, los programas tienen abierto 3 canales. Lo podemos ver con lsof -p [PID], columna FD.

  • Entrada 0 entrada estándar (STDIN) lee datos
  • Entrada 1 salida estándar (STDOUT) escribe los datos
  • Entrada 2 error estándar (STDERR) escribe los errores

Habitualmente el 0 se conecta al teclado, el 1 a la pantalla y el 2 a la pantalla también. Vamos a ver algunos ejemplos:

cat < /etc/passwd
Lee por la entrada 0 (/etc/passwd) y sale por la 1, pantalla

cat < /etc/passwd > /tmp/passwd
Lee por el 0, y sale por el 1(/tmp/passwd)

cat < /etc/passwd > /tmp/passwd 2> /tmp/error

cat < /etc/passwd > /tmp/passwd 2> &1
Lo envía al que esté en el 1

Más ejemplos:

cat > /tmp/p1.txt; cat < /tmp/p1.txt

1) cat enviará los datos que le lleguen por la entrada(teclado,0,STDIN) 2) a la salida /tmp/p1.txt(1,STDOUT).

La pipe sólo conecta comandos, no ficheros.

Otro ejemplo más:

1) cat > matarpids.txt
Introducimos en el txt los PID’s que queremos.

2) kill -9 $(cat matarpids.txt)
adiós a los procesos seleccionados 😉

Kill es un comando que, excepcionalmente, no está conectado a los canales entrada y salida.

2 thoughts on “Linux LPI1 – Apuntes II

  1. Hola Choutos

    por defecto cat está conectado a la salida estándar (1 – STDOUT). La pipe “>” hace que, en vez de mostrarlo por pantalla, lo añade al fichero .txt. De ese modo, cat se convierte en una especie de editor de textos básico.

    El ejemplo era para ver como se pasaba información al parámetro kill, porque el matarpids.txt contiene los PIDS que hemos introducido por teclado con el cat y que cat ha añadido al txt.

    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *