!
を使用できます 最後のコマンドの 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
を grep します
pkill
を使用 コマンド
pkill -f test.py
(または) pgrep
を使用したより確実な方法 実際のプロセス ID を検索する
kill $(pgrep -f 'python test.py')
または、実行中のプログラムの複数のインスタンスが特定され、それらすべてを強制終了する必要がある場合は、Linux および BSD で killall(1) を使用します
killall test.py