Setelah skrip bash saya selesai dengan server selenium, skrip tersebut membunuh seperti ini:
kill `ps -ef | grep selenium | awk '{ print $2 }'`
Meskipun ini berhasil dan tidak membunuh skrip selenium, ia juga mencoba untuk mematikan proses untuk grep selenium
Jadi pada saat nomor proses kembali ke perintah kill, prosesnya hilang, sehingga akhirnya menghasilkan pesan kesalahan. (Dengan kata lain: pada akhirnya membunuh dua proses, salah satunya adalah server selenium nyata, yang lain adalah proses singkat yang merupakan efek samping dari bagaimana saya melakukan perintah ini.)
Apakah ada cara yang lebih anggun untuk membunuh proses itu, yang tidak memiliki efek samping yang tidak diinginkan ini?
(FWIW satu ide yang saya miliki: skrip yang sama ini memulai selenium sebelumnya dalam skrip, jadi mungkin jika ada cara saya bisa menangkap PID ketika saya memulai selenium, saya bisa menyimpannya dan membunuhnya secara langsung, alih-alih mencari-cari ID proses. Masalahnya adalah, saya tidak tahu cara mendapatkan PID itu, bagaimana menggunakan variabel untuk menyimpannya dan bagaimana cara merujuknya nanti dalam skrip. Tapi apakah itu cara yang lebih baik untuk melakukannya?)
Coba
pgrep
perintah, yang akan menampilkan PID dari perintah yang Anda minati.Untuk benar-benar mematikan proses, gunakan
pkill
perintah pendamping .sumber
pgrep java
dan berfungsi :-) terima kasih!pgrep -f selenium
seharusnya bekerjapkill
jauh lebih sederhana.pkill
menggunakan kriteria pencocokan yang sama persispgrep
, sehingga Anda dapat melakukan ini dalam 1 perintah, bukan 2 (dan harus bergantung pada output dari satu).Coba gunakan
grep [s]elenium
. Ini tidak akan menemukan proses grep.sumber
grep
menggunakan BREs secara default. Yaitu,[
dan]
munculargv
untukgrep
, tetapi tidak cocok karena[
dan]
tidak digunakan secara harfiah olehgrep
.| grep -v grep
komponen dalam pipa. Tapi ini cukup elegan dan saya menyukainya!ps -ef | grep \[s]elenium
. Meskipun saya menemukanlsof
alternatif yang jauh lebih baik untuk menggunakanps
dangrep
.The
killall
perintah belum disebutkan, dan saya merasa itu adalah tambahan yang berguna untuk repertoar.Anda juga dapat menggunakan
-r regex
opsi untuk menentukan ekspresi reguler agar cocok dengan nama proses, dan bahkan nilai waktu:Membunuh semua proses selenium lebih dari 5 menit.
sumber
killall
Gunakan
-m 1
sakelar dengan perintah grep untuk mengambil hanya proses pertama yang ditemukan. Selama Anda mengurutkan proses Anda dengan PID, naik, itu akan berhasil.sumber