Anda dapat menggunakan !
untuk mendapatkan PID dari perintah terakhir.
Saya menyarankan sesuatu yang mirip dengan yang berikut, yang juga memeriksa apakah proses yang ingin Anda jalankan sudah berjalan:
#!/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
Lalu, ketika Anda ingin membunuhnya:
#!/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
Tentu saja jika pembunuhan harus dilakukan beberapa saat setelah perintah diluncurkan, Anda dapat memasukkan semuanya ke dalam skrip yang sama:
#!/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
Jika Anda ingin dapat menjalankan lebih banyak perintah dengan nama yang sama secara bersamaan dan dapat mematikannya secara selektif, diperlukan sedikit pengeditan skrip. Katakan padaku, aku akan mencoba membantumu!
Dengan sesuatu seperti ini Anda yakin Anda membunuh apa yang ingin Anda bunuh. Perintah seperti pkill
atau mengambil ps aux
bisa berisiko.
Gunakan pkill
perintah sebagai
pkill -f test.py
(atau) cara yang lebih bodoh menggunakan pgrep
untuk mencari id proses yang sebenarnya
kill $(pgrep -f 'python test.py')
Atau jika lebih dari satu instance dari program yang sedang berjalan teridentifikasi dan semuanya perlu dimatikan, gunakan killall(1) di Linux dan BSD
killall test.py