Bienvenido(a) a Alcance Libre 12/08/2022, 14:04
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2015 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.
En este documento aprenderá el uso de free, jobs, bg, fg, kill, killall, ps, top y taskset.
Un PID o identidad de proceso, es un decimal entero que especifica un proceso o un grupo de procesos. Todos los procesos que se ejecuten en un sistema pueden ser terminados o aniquilados utilizando kill o bien killall, excepto por el proceso con PID 1, el cual corresponde siempre a /sbin/init.
Un Job ID o identidad de trabajo, identifica un trabajo o grupo de trabajos que se ejecutan en segundo plano. Puede utilizar kill para terminar o aniquilar los trabajos originados de una misma consola o intérprete de mandatos en ejecución.
Los trabajos se gestionan a través de bg, fg y jobs.
Los procesos se terminan normalmente con SIGTERM (número de señal 15) o bien se aniquilan con SIGKILL (número de señal 9), utilizando kill o killall.
Ingrese al sistema como root.
Si utiliza CentOS 7, Fedora™ o Red Hat™ Enterprise Linux 7, ejecute lo siguiente:
yum -y install psmisc procps-ng top util-linux-ng |
Si utiliza ALDOS 1.4, CentOS 6 o Red Hat™ Enterprise Linux 6, ejecute lo siguiente:
yum -y install psmisc procps top util-linux-ng |
Si utiliza openSUSE™ o SUSE™ Linux Enterprise, ejecute lo siguiente:
yast -i procps psmisc util-linux |
Cierre la sesión como root e ingrese nuevamente al sistema como usuario regular (fulano) o bien ejecute lo siguiente:
su -l fulano |
Se trata de una herramienta que muestra un resumen fácil de entender del contenido de /proc/meminfo. Muestra la cantidad de memoria utilizadas y disponible en el sistema.
De modo predeterminado free muestra la información en escala de KiB. Ejecute lo siguiente:
free |
Lo anterior debe devolver una salida similar a la siguiente:
total used free shared buffers cached
Mem: 2956352 2752032 204320 0 159592 1509388
-/+ buffers/cache: 1083052 1873300
Swap: 6291448 167468 6123980
|
Ejecute lo siguiente para ver la la salida en MiB:
free -m |
Lo anterior debe devolver una salida similar a la siguiente.
total used free shared buffers cached
Mem: 2887 2712 174 0 156 1487
-/+ buffers/cache: 1068 1818
Swap: 6143 163 5980
|
La interpretación de ésta última salida indica lo siguiente:
Ejecute lo siguiente para mostrar lo anterior con una fila con los totales en MiB:
free -mt |
Lo anterior debe devolver una salida similar a la siguiente.
total used free shared buffers cached
Mem: 2887 2712 174 0 156 1487
-/+ buffers/cache: 1068 1818
Swap: 6143 163 5980
Total: 9031 2876 6154
|
Puede consultar otras opciones de free a través de su página de manual ejecutando lo siguiente:
man 1 free |
Ejecute sleep con el valor 600 (pausa por 600 segundos), a fin de utilizar éste como trabajo de ejemplo.
sleep 600 |
Pulse CTRL+Z, lo cual devolverá una salida similar a la siguiente:
^Z [1]+ Detenido sleep 600 |
Ejecute jobs para visualizar el trabajo detenido:
jobs |
Lo anterior debe devolver la siguiente salida:
[1]+ Detenido sleep 600 |
Ejecute bg para reactivar el trabajo 1 en segundo plano:
bg 1 |
La salida deberá devolver lo siguiente:
[1]+ sleep 600 & |
Ejecute nuevamente sleep, con el valor 700 y un signo amperson (&) al final:
sleep 700 & |
La salida devolverá algo similar a lo siguiente, indicando el número de trabajo (2) y el número de identidad de proceso (PID):
[2] 3768 |
Con lo anterior habrá enviado este trabajo directamente a segundo plano.
Ejecute jobs para visualizar los trabajos en segundo plano:
[1]- Ejecutando sleep 600 & [2]+ Ejecutando sleep 700 & |
Ejecute fg con 1 como argumento para enviar a primer plano el primer trabajo:
fg 1 |
Lo anterior hará que sleep 600 regrese a primer plano.
Para terminar este último trabajo, pulse CTRL+C.
Ejecute ps con las opciones aux (todos los procesos en todas las terminales, orientado a usuarios e incluyendo todos los procesos con o sin un TTY), utilizando una tubería (|) con less para poder observar cómodamente la salida y los valores de las columnas USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME y COMMAND.
ps aux |less |
Ejecute de nuevo lo anterior pero utilizando una tubería (|) y grep para visualizar solamente los procesos cuyo nombre incluyan la cadena sleep:
ps aux |grep sleep |
Lo anterior le devolverá una salida similar a la siguiente:
fulano 3768 0.0 0.0 100984 568 pts/2 S 11:50 0:00 sleep 700
fulano 3820 0.0 0.0 103396 832 pts/2 S+ 11:51 0:00 grep --color=auto sleep
|
La segunda columna corresponde al número de identidad de proceso (PID), determine el correspondiente al procesos sleep 700.
ejecute kill con este número de identidad de proceso, con la finalidad terminar éste de manera normal (SIGTERM).
kill 3768 |
Lo anterior devolverá la siguiente salida:
[2]+ Terminado sleep 700 |
Ejecute de nuevo sleep, ahora con 800 como argumento, con un signo amperson (&) al final, a fin de generar un nuevo trabajo en segundo plano.
sleep 800 & |
Lo anterior debe devolver una salida similar a la siguiente:
[1] 3820 |
La forma más sencilla de terminar de manera normal (SIGTERM) un trabajo es ejecutando kill con el número de trabajo precedido por un signo %, como argumentos. Ejemplo:
kill %1 |
La salida solo devolverá el símbolo de sistema. Si vuelve a pulsar la tecla ENTER, la salida será similar a la siguiente:
[1]+ Terminado sleep 800 |
Ejecute de nuevo sleep con 850 como argumento y un signo amperson (&) al final para generar un nuevo trabajo en segundo plano.
sleep 850 & |
Lo anterior debe devolver una salida similar a la siguiente:
[1] 3830 |
Ejecute nuevamente ps con las opciones aux, agregando una tubería y grep para visualizar en la salida solamente los procesos cuyo nombre incluyan la cadena sleep:
ps aux |grep sleep |
Lo anterior le devolverá una salida similar a la siguiente:
fulano 3830 0.0 0.0 100984 564 pts/2 S 11:54 0:00 sleep 850
fulano 3835 0.0 0.0 103396 828 pts/2 S+ 11:56 0:00 grep --color=auto sleep
|
Determine el número de identidad de proceso correspondiente al procesos sleep 850.
Ejecute kill con este número de identidad de proceso, correspondiente a sleep 850, con la finalidad aniquilar éste (SIGKILL).
kill -9 3830 |
Lo anterior debe devolver la siguiente salida:
[1]+ Terminado (killed) sleep 850 |
Ejecute lo siguiente para generar dos nuevos trabajos en segundo plano:
sleep 600 & sleep 700 & |
Lo anterior devolverá algo similar a lo siguiente:
[1] 3924 [2] 3925 |
Ejecute jobs para visualizar ambos trabajos:
jobs |
Lo anterior deberá devolver la siguiente salida:
[1]- Ejecutando sleep 600 & [2]+ Ejecutando sleep 700 & |
Ejecute ps, con la opción -j, para visualizar los números de identidad de proceso (PID) de estos trabajos:
ps -j |
Lo anterior debe devolver una salida similar a la siguiente:
PID PGID SID TTY TIME CMD 3624 3624 3624 pts/2 00:00:00 bash 3924 3924 3624 pts/2 00:00:00 sleep 3925 3925 3624 pts/2 00:00:00 sleep 3937 3937 3624 pts/2 00:00:00 ps |
Ejecute killall con la cadena «sleep» como argumento, a fin de terminar de manera normal de todos los procesos denominados sleep.
killall sleep |
Lo anterior deberá devolver la siguiente salida:
[1]- Terminado sleep 600 [2]+ Terminado sleep 700 |
Ejecute lo siguiente para generar dos nuevos trabajos en segundo plano:
sleep 800 & sleep 900 & |
Lo anterior devolverá algo similar a lo siguiente:
[1] 3949 [2] 3950 |
Ejecute jobs para visualizar ambos trabajos:
jobs |
Lo anterior deberá devolver la siguiente salida:
[1]- Ejecutando sleep 800 & [2]+ Ejecutando sleep 900 & |
Ejecute ps, con la opción -j, para visualizar lo números de identidad de proceso (PID) de estos trabajos:
ps -j |
Lo anterior debe devolver una salida similar a la siguiente:
PID PGID SID TTY TIME CMD 3624 3624 3624 pts/2 00:00:00 bash 3949 3949 3624 pts/2 00:00:00 sleep 3950 3950 3624 pts/2 00:00:00 sleep 3956 3956 3624 pts/2 00:00:00 ps |
Ejecute killall, con la opción -s y el valor 9, junto con la cadena «sleep» como argumento, a fin de aniquilar (terminación anormal) de todos los procesos denominados sleep.
killall -s 9 sleep |
Lo anterior deberá devolver la siguiente salida:
[1]- Terminado (killed) sleep 800 [2]+ Terminado (killed) sleep 900 |
Ejecute tar con las opciones jcf para generar el archivo pixmaps.tar.bz2 con el contenido del directorio /lib/modules, ejecutando lo siguiente:
tar jcf modulos.tar.bz2 /lib/modules |
Al terminar utilice time para cuantificar la ejecución de tar con las opciones jxf para descomprimir el archivo modulos.tar.bz2. El objetivo será cuantificar la descompresión con la prioridad de planificación 0 (valor predeterminado del sistema), la cual permite utilizar los recursos que regularmente permite utilizar el sistema al usuario.
time tar jxf modulos.tar.bz2 |
La salida debe devolver algo similar a lo siguiente:
real 0m13.237s user 0m12.491s sys 0m1.824s |
Ejecute nuevamente time con nice para ejecutar tar con las opciones jxf para descomprimir el archivo modulos.tar.bz2. El objetivo será realizar la descompresión cambiando la prioridad de planificación a 10 —valor predeterminado de nice — a fin de utilizar menos recursos de sistema.
time nice -n +10 tar jxf modulos.tar.bz2 |
La salida debe devolver algo similar a lo siguiente.
real 0m13.638s user 0m12.947s sys 0m1.908s |
Los resultados deberán ser ligeramente mayores que la ejecución con el valor predeterminado de prioridad de planificación (0).
Ejecute nice con la opción -n y el valor 19, para ejecutar tar con las opciones jxf, con la menor prioridad posible, para descomprimir el archivo modulos.tar.bz2. El objetivo será realizar la descompresión cambiando la prioridad de planificación a 10 (valor predeterminado de nice), a fin de utilizar menos recursos de sistema.
time nice -n +20 tar jxf modulos.tar.bz2 |
La salida debe devolver algo similar a lo siguiente.
real 0m13.918s user 0m13.045s sys 0m1.875s |
Los resultados deberán ser sensiblemente mayores que la ejecución con el valor predeterminado de prioridad de planificación (0).
El usuario regular solo pude definir valores de prioridad de planificación del 0 al 19, prioridad de planificación predeterminada a prioridad de planificación menos favorable. Los valores negativos, del -1 al -20, que son los más favorables, sólo los pude utilizar root.
Ejecutando su con la opción -c, con la cual se indicará entre comillas cualquier cosa para ser ejecutada como root, repita lo anterior pero con valor -20 para nice.
su -c "time nice -n -20 tar jxf modulos.tar.bz2" |
Lo anterior solicitará se ingrese la clave de acceso de root y devolverá una salida similar a la siguiente:
real 0m13.328s user 0m12.834s sys 0m1.978s |
Los resultados deberán ser sensiblemente inferiores que la ejecución con el valor predeterminado de prioridad de planificación (0).
Lo anterior generará un directorio denominado lib dentro del directorio de inicio del usuario, pero éste es propiedad de root, por lo cual el usuario regular será incapaz de eliminar. Elimine éste antes de continuar o bien se va a repetir procedimientos.
su -c "rm -fr /home/fulano/lib" |
Renice sirve para cambiar la prioridad de planificación de procesos en ejecución por número de proceso, usuario o grupo. Los valores de prioridad de planificación se pueden visualizar utilizando ps con las opciones alx (todos los procesos en todas las terminales, en formato largo e incluyendo todos los procesos con o sin un TTY, respectivamente). Ejecute lo siguiente:
ps alx |less |
Lo anterior mostrará las columnas F, UID, PID, PPID, PRI, NI, VSZ, RSS, WCHAN, STAT, TTY, TIME y COMMAND. Los valores de prioridad planificada corresponden a la sexta columna (NI). Para salir pulse la tecla q
El siguiente ejemplo cambia la prioridad de planificación a -10 al proceso que en el ejemplo corresponde al PID 45678:
su -c "renice -n -10 -p 45678" |
El siguiente ejemplo cambia la prioridad de planificación a -10 a todos los procesos del usuario fulano:
su -c "renice -n -10 -u fulano" |
El siguiente ejemplo cambia la prioridad de planificación a -10 a todos los procesos del grupo desarrollo:
su -c "renice -n -10 -g desarrollo" |
El siguiente ejemplo cambia la prioridad de planificación a -10 al procesos 34567 del usuario fulano:
su -c "renice -n -10 -p 34567 -u fulano" |
Cambie al usuario root. A partir de este paso sólo podrá realizar los procedimientos con privilegios de root.
Taskset sólo tiene sentido utilizarlo cuando se dispone de más de un CPU lógico en el sistema. Ejecute nproc para determinar el número de CPUs lógicos en el sistema:
nproc |
Lo anterior sólo devolverá el número de CPUs lógicos del sistema.
Ejecute lscpu para obtener información más detallada:
lscpu |
Asumiendo que el sistema dispone de dos núcleos lógicos, lo anterior puede devolver una salida similar a la siguiente:
Architecture: i686
CPU op-mode(s): 32-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 14
Stepping: 12
CPU MHz: 1200.000
BogoMIPS: 3200.10
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
|
Lo anterior representa un resumen del contenido del archivo /proc/cpuinfo, que también puede consultarse ejecutando lo siguiente:
less /proc/cpuinfo |
Puede utilizar taskset para establecer u obtener la afinidad de CPU de un proceso a través de su PID o bien para ejecutar un nuevo procesos con una afinidad de CPU arbitraria. La afinidad de CPU es una propiedad de planificador del núcleo de Linux que vincula un procesos a un conjunto de CPUs en el sistema. Este planificador se encargará de que se mantenga la afinidad de CPU y que el proceso sólo se ejecute en el CPU o en los CPUs especificados. Cabe señalar que de manera nativa el planificador del núcleo de Linux incluye soporte para afinidad natural, la cual consiste en que el planificador intentará mantener los procesos en el mismo CPU tanto como sea práctico para mantener un buen desempeño en el sistema, por lo cual la manipulación de la afinidad de CPU sólo es útil para ciertas tareas y aplicaciones.
Cabe señalar que taskset siempre devolverá un error si se especifica una máscara de bit incorrecta o bien un CPU inexistente.
La afinidad de CPU se representa a través de una máscara de bit (bitmask), donde el bit de menor valor corresponde al primer CPU lógico y el bit mayor corresponde al último CPU lógico. Las máscaras de bit se representan en hexadecimal:
Para iniciar un nuevo proceso con una afinidad de CPU en particular, se utiliza la siguiente sintaxis:
taskset mascara mandato |
Ejemplo:
taskset 0x00000001 tar jcf modulos.tar.bz2 /lib |
Ejecute taskset con la opción -p para indicar que se utilizará un PID existente y el número de PID como argumento ara obtener la afinidad de CPU de un procesos en ejecución:
taskset -p pid |
Ejemplo:
taskset -p 34567 |
Ejecute taskset con la opción -p para indicar que se utilizará un PID existente, la mascara de afinidad de CPU deseada y el número de PID como argumentos ara cambiar la afinidad de CPU de un procesos en ejecución:
taskset -p mascara pid |
Ejemplo:
taskset -p 0x00000001 34567 |
Si se dificulta el uso de máscaras de bit en hexadecimal, también es posible utilizar la opción -c y una lista numérica de CPUs lógicos, donde 0 corresponde al primer CPU, 1 corresponde al segundo CPU lógico, 2 corresponde al tercer CPU lógico y así sucesivamente.
taskset -c -p lista pid |
Ejemplo:
taskset -c -p 1 34567 |
También es posible especificar varios CPU de manera simultánea, definiendo una lista de éstos separada por comas y que también permite definir rangos. Ejemplos:
taskset -c 0,1 tar jcf modulos.tar.bz2 /lib taskset -c -p 0,2 34567 taskset -c -p 4-7 34567 |
Al terminar los procedimientos, cierre la sesión de root.
Top es una herramienta que proporciona una visualización continua y en tiempo real de los procesos activos en un sistema, como una lista que de modo predeterminado lo hace de acuerdo al uso del CPU. Puede ordenar la lista por uso de memoria y tiempo de ejecución.
Para ordenar la lista de procesos por orden de uso de memoria, pulse SHIFT+M. Para ordena la lista de procesos por orden de tiempo de ejecución, pulse SHIFT+T. Para invertir el orden de la lista, pulse SHIFT+R. Para activar o bien desactivar, la visualización por hilos, pulse SHIFT+H. Para ordenar de nuevo la lista de procesos por orden de uso de CPU, pulse SHIFT+P.
Para mostrar los procesos de un usuario en específico, pulse la tecla u y defina a continuación el nombre del usuario.
Para terminar o aniquilar cualquier proceso, pulse la tecla k y defina a continuación el número de identidad de proceso que corresponda y luego la señal a utilizar (9 o 15).
Para cambiar la prioridad de planificación de cualquier proceso, pulse la tecla r y a continuación defina el número de identidad de proceso que corresponda y luego el valor de prioridad de planificación deseado.
Pulse la tecla h para ver el la ayuda completa de top.
Última Edición: 14/09/2016, 20:31| Hits: 17,365