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
のコマンドがあることがわかりました。
応援よろしくお願いします!
pkill
コマンドを次のように使用します
pkill -f test.py
(または)pgrep
を使用して実際のプロセスIDを検索する、より簡単な方法
kill $(pgrep -f 'python test.py')
!
を使用して、最後のコマンドの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は危険な場合があります。
ps -ef | grep python
「pid」を返し、プロセスを強制終了します
Sudo kill -9 pid
例:psコマンドの出力:user 13035 4729 0 13:44 pts/10 00:00:00 python(ここで13035はpid)
バシズムを使用して。
#!/bin/bash
python test.py &
kill $!
$!
は、バックグラウンドで開始された最後のプロセスのPIDです。バックグラウンドで複数のスクリプトを開始する場合は、別の変数に保存することもできます。