Buscar..


Listar trabajos actuales

$ tail -f /var/log/syslog > log.txt
[1]+  Stopped                 tail -f /var/log/syslog > log.txt

$ sleep 10 &

$ jobs
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
[2]-  Running                 sleep 10 &

Manejo de trabajos

Creando empleos

Para crear un trabajo, simplemente agregue un solo & después del comando:

$ sleep 10 &
[1] 20024

También puede hacer que un proceso en ejecución sea un trabajo presionando Ctrl + z :

$ sleep 10
^Z
[1]+  Stopped                 sleep 10

Fondo y primer plano de un proceso.

Para poner el proceso en primer plano, el comando fg se usa junto con %

$ sleep 10 &
[1] 20024

$ fg %1
sleep 10

Ahora puedes interactuar con el proceso. Para volver a ponerlo en segundo plano, puede utilizar el comando bg . Debido a la sesión de terminal ocupada, primero debe detener el proceso presionando Ctrl + z .

$ sleep 10
^Z
[1]+  Stopped              sleep 10

$ bg %1
[1]+ sleep 10 &

Debido a la pereza de algunos programadores, todos estos comandos también funcionan con un solo % si hay un solo proceso, o para el primer proceso en la lista. Por ejemplo:

$ sleep 10 &
[1] 20024

$ fg %        # to bring a process to foreground 'fg %' is also working.
sleep 10

o solo

$ %           # laziness knows no boundaries, '%' is also working.
sleep 10

Además, con solo escribir fg o bg sin ningún argumento, se manejará el último trabajo:

$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20

Matando trabajos en ejecución

$ sleep 10 &
[1] 20024

$ kill %1
[1]+  Terminated              sleep 10

El proceso de suspensión se ejecuta en segundo plano con el ID de proceso (pid) 20024 y el número de trabajo 1 . Para hacer referencia al proceso, puede usar el pid o el número de trabajo. Si usa el número de trabajo, debe prefijarlo con % . La señal de eliminación predeterminada enviada por kill es SIGTERM , que permite que el proceso de destino salga correctamente.

Algunas señales comunes de muerte se muestran a continuación. Para ver una lista completa, ejecute kill -l .

Nombre de la señal Valor de señal Efecto
SIGHUP 1 Colgar
SIGINT 2 Interrumpir desde el teclado
SIGKILL 9 Señal de matar
SIGTERM 15 Señal de terminación

Iniciar y matar procesos específicos.

Probablemente, la forma más sencilla de eliminar un proceso en ejecución es seleccionándolo a través del nombre del proceso como en el siguiente ejemplo, usando el comando pkill como

pkill -f test.py

(o) una forma más pgrep usar pgrep para buscar el identificador de proceso real

kill $(pgrep -f 'python test.py')

Se puede obtener el mismo resultado utilizando grep sobre ps -ef | grep name_of_process luego mata el proceso asociado con el pid resultante (id de proceso). La selección de un proceso con su nombre es conveniente en un entorno de prueba, pero puede ser realmente peligroso cuando se usa el script en producción: es prácticamente imposible asegurarse de que el nombre coincidirá con el proceso que realmente desea eliminar. En esos casos, el siguiente enfoque es realmente seguro.

Inicie el script que finalmente se eliminará con el siguiente enfoque. Supongamos que el comando que desea ejecutar y finalmente matar es python test.py

#!/bin/bash

if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi

Esto creará un archivo en el directorio /tmp contiene el pid del proceso python test.py . Si el archivo ya existe, asumimos que el comando ya se está ejecutando y que el script devuelve un error.

Luego, cuando quieras matarlo usa el siguiente script:

#!/bin/bash

if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi

eso matará exactamente el proceso asociado con su comando, sin depender de ninguna información volátil (como la cadena utilizada para ejecutar el comando). Incluso en este caso, si el archivo no existe, la secuencia de comandos asume que desea eliminar un proceso que no se está ejecutando.

Este último ejemplo se puede mejorar fácilmente para ejecutar el mismo comando varias veces (agregando al archivo pid en lugar de sobrescribirlo, por ejemplo) y para administrar los casos en que el proceso muere antes de eliminarse.

Listar todos los procesos

Hay dos formas comunes de enumerar todos los procesos en un sistema. Ambos listan todos los procesos que ejecutan todos los usuarios, aunque difieren en el formato que emiten (el motivo de las diferencias es histórico).

ps -ef   # lists all processes 
ps aux   # lists all processes in alternative format (BSD)

Esto se puede usar para verificar si una aplicación dada se está ejecutando. Por ejemplo, para verificar si el servidor SSH (sshd) se está ejecutando:

ps -ef | grep sshd

Compruebe qué proceso se está ejecutando en un puerto específico

Para comprobar qué proceso se está ejecutando en el puerto 8080

lsof -i :8080

Encontrar información sobre un proceso en ejecución

ps aux | grep <search-term> muestra los procesos que coinciden con el término de búsqueda

Ejemplo:

root@server7:~# ps aux | grep nginx
root       315  0.0  0.3 144392  1020 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data  5647  0.0  1.1 145124  3048 ?        S    Jul18   2:53 nginx: worker process
www-data  5648  0.0  0.1 144392   376 ?        S    Jul18   0:00 nginx: cache manager process
root     13134  0.0  0.3   4960   920 pts/0    S+   14:33   0:00 grep --color=auto nginx
root@server7:~#

Aquí, la segunda columna es la identificación del proceso. Por ejemplo, si desea finalizar el proceso nginx, puede usar el comando kill 5647 . Siempre se recomienda utilizar el comando kill con SIGTERM lugar de SIGKILL .

Desaprobando trabajo de fondo

$ gzip extremelylargefile.txt &
$ bg
$ disown %1

Esto permite que un proceso de ejecución prolongada continúe una vez que su shell (terminal, ssh, etc.) esté cerrado.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow