web-dev-qa-db-ja.com

pythonスクリプトをbashスクリプトで殺す方法

pythonスクリプトをバックグラウンドで実行するためのスクリプトを開始するbashスクリプトを実行します

#!/bin/bash

python test.py &

では、bashスクリプトを使用してスクリプトを強制終了する方法を教えてください。

次のコマンドを使用して強制終了しましたが、no process foundが出力されました

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

実行中のプロセスをps aux | lessで確認したところ、実行中のスクリプトにpython test.pyのコマンドがあることがわかりました。

応援よろしくお願いします!

8
Jeff Pang

pkillコマンドを次のように使用します

pkill -f test.py

(または)pgrepを使用して実際のプロセスIDを検索する、より簡単な方法

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

!を使用して、最後のコマンドの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のようなコマンドやps auxのgreppingは危険な場合があります。

2
ps -ef | grep python

「pid」を返し、プロセスを強制終了します

Sudo kill -9 pid

例:psコマンドの出力:user 13035 4729 0 13:44 pts/10 00:00:00 python(ここで13035はpid)

0
Afsal Salim

バシズムを使用して。

#!/bin/bash

python test.py &
kill $!

$!は、バックグラウンドで開始された最後のプロセスのPIDです。バックグラウンドで複数のスクリプトを開始する場合は、別の変数に保存することもできます。

0
Moritz Sauter