GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo matar el script de python con el script bash

Puedes usar el ! para obtener el PID del último comando.

Sugeriría algo similar a lo siguiente, que también verifique si el proceso que desea ejecutar ya se está ejecutando:

#!/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

Entonces, cuando quieras matarlo:

#!/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

Por supuesto, si el asesinato debe tener lugar algún tiempo después de que se haya lanzado el comando, puede poner todo en el mismo script:

#!/bin/bash

python test.py &                    # This does not check if the command
echo $! > /tmp/test.py.pid          #+has already been executed. But,
                                    #+would have problems if more than 1
sleep(<number_of_seconds_to_wait>)  #+have been started since the pid file would.
                                    #+be overwritten.
if [[ -e /tmp/test.py.pid ]]; then
    kill `cat /tmp/test.py.pid`
else
    echo "test.py is not running"
fi

Si desea poder ejecutar más comandos con el mismo nombre simultáneamente y poder eliminarlos de forma selectiva, se necesita una pequeña edición del script. Dime, ¡intentaré ayudarte!

Con algo así estás seguro de que estás matando lo que quieres matar. Comandos como pkill o grepping el ps aux puede ser arriesgado.


Usa pkill comando como

pkill -f test.py

(o) una forma más infalible usando pgrep para buscar el ID de proceso real

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

O si se identifica más de una instancia del programa en ejecución y es necesario eliminarlas todas, use killall(1) en Linux y BSD

killall test.py 

Linux
  1. Cómo dividir una cadena en Bash Script

  2. Cómo dockerizar aplicaciones de Python con Miniconda

  3. ¿Cómo agregar automáticamente una cuenta de usuario Y una contraseña con un script Bash?

  4. ¿Cómo pasar parámetros a un script Bash?

  5. nombre base con espacios en un script bash?

Cómo escribir un script Bash con ejemplos

Cómo ejecutar un comando de Shell con Python

Cómo crear documentos con scripts Bash

Cómo ejecutar un script de Python en PHP

Cómo ejecutar un script Bash

Cómo instalar Python 2.7 en CentOS 7.1 o 6.7 con Anaconda