2016-11-17 2 views
1

Я бегу Баш скрипт, с которой начать питон скрипт для запуска в фоновом режимеКак убить питона скрипт с Баш скрипт

#!/bin/bash 

python test.py & 

Так как я могу я убить скрипт с Баш скрипт тоже?

Я использовал следующую команду, чтобы убить, но выход no process found

killall $(ps aux | grep test.py | grep -v grep | awk '{ print $1 }') 

Я стараюсь, чтобы проверить запущенные процессы, ps aux | less и обнаружил, что запущен сценарий, имеющий команда python test.py

Пожалуйста помогите, спасибо!

+0

Вы нашли ключевое слово «test.py» в информации о процессе «ps»? – staticor

ответ

6

Использование pkill команды в

pkill -f test.py 

(или) более верный способ, используя pgrep для поиска фактического идентификатор процесса

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

Использование 'pkill' в скрипте на самом деле очень опасно, так как вы убьете все процессы, названные как аргумент! –

+0

Другой слепой-невидимый посредине? – Inian

+0

@RiccardoPetraglia: это обновление звучит достаточно хорошо для вас? – Inian

1

Вы можете использовать !, чтобы получить PID последней команды.

Я хотел бы предложить что-то похожее на следующее, что также проверить, если процесс, который вы хотите запустить уже работает:

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

Затем, когда вы хотите, чтобы убить его:

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

Конечно, если убийство должно произойти некоторое время после запуска команды, вы можете поместить все в один и тот же сценарий:

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

Если вы хотите иметь возможность запускать еще одну команду с тем же именем одновременно и иметь возможность их выборочно убивать, требуется небольшое редактирование сценария. Скажите, я постараюсь вам помочь!

С чем-то подобным вы уверены, что убиваете то, что хотите убить. Такие команды, как pkill или grepping ps aux, могут быть рискованными.

0
ps -ef | grep python 

он будет возвращать "PID", а затем убить процесс

sudo kill -9 pid 

например, вывод команды пса: пользователя 13035 4729 0 13:44 PTS/10 00:00:00 питона (здесь 13035 is pid)

+0

Команда 'kill -9' отличается от' kill'. Обратите внимание при использовании опции '-9'. –

0

Использование базизмов.

#!/bin/bash 

python test.py & 
kill $! 

PID последнего процесса, начатого в фоновом режиме. Вы также можете сохранить его в другой переменной, если вы запустите несколько сценариев в фоновом режиме.

Смежные вопросы