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:
1 | #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:
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:
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:
Otros comandos relacionados son:
¿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.
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.
Creo que el último ejemplo es erroneo:
1) cat > matarpids.txt ¿?¿?¿?
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.