GNU/Linux >> Linux Esercitazione >  >> Linux

Come uccidere lo script Python con lo script bash

Puoi usare il ! per ottenere il PID dell'ultimo comando.

Suggerirei qualcosa di simile al seguente, che controlla anche se il processo che vuoi eseguire è già in esecuzione:

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

Quindi, quando vuoi ucciderlo:

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

Ovviamente se l'uccisione deve avvenire qualche tempo dopo che il comando è stato lanciato, puoi mettere tutto nello stesso 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

Se vuoi essere in grado di eseguire più comandi con lo stesso nome contemporaneamente ed essere in grado di ucciderli in modo selettivo, è necessaria una piccola modifica dello script. Dimmi, cercherò di aiutarti!

Con qualcosa del genere sei sicuro di uccidere ciò che vuoi uccidere. Comandi come pkill o afferrare il ps aux può essere rischioso.


Usa pkill comando come

pkill -f test.py

(o) un modo più infallibile usando pgrep per cercare l'ID processo effettivo

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

Oppure, se viene identificata più di un'istanza del programma in esecuzione e tutte devono essere terminate, utilizzare killall(1) su Linux e BSD

killall test.py 

Linux
  1. Come eseguire il debug di uno script Bash?

  2. Controlla quanto tempo impiega uno script Bash per essere eseguito con il comando Time

  3. Come aggiungere automaticamente account utente E password con uno script Bash?

  4. Impossibile terminare lo script Python con Ctrl-C

  5. Chiama lo script Python da bash con argomento

Come scrivere uno script Bash con esempi

Come eseguire un comando Shell con Python

Come creare documenti con gli script Bash

Come eseguire uno script Python in PHP

Come eseguire uno script Bash

Come installare Python 2.7 su CentOS 7.1 o 6.7 con Anaconda