Saat ini saya menggunakan baris seperti ini di file skrip sh saya:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Tapi saya ingin tahu bagaimana menyebutnya hanya jika proses (di myServer
sini) berjalan?
bash
command-line
kill
myWallJSON
sumber
sumber
kill
hanya ketika proses sedang berjalan, karena ada kondisi perlombaan antara tes dan doakill
(mungkin proses berhenti karena alasan lain dalam waktu singkat). Anda harus menggunakanpkill
ataukillall
yang melakukan persis sama dengan apa yang Anda coba lakukan, tetapi dengan kurang mengetik (dan mungkin beberapa kelebihan lainnya juga).Jawaban:
Saya biasanya hanya menggunakan pgrep dan pkill
sumber
pkill myServer
ataukillall -q myServer
? Tidak ada kerugian untuk mencoba membunuh proses yang tidak ada.|| true
kemudian.if ! killall -q myServer; then echo ERROR; fi
?Anda dapat membunuh proses dengan nama menggunakan
pkill
ataukillall
, periksa halaman manual mereka.sumber
kill
, ini hanya membunuh jika proses sedang berjalan. Misalnyapkill -u myuser -f myprocess\.[0-9]+
Sedikit pendekatan yang berbeda akan menjadi seperti ini:
Ini akan menghindari
1
Kode-Kesalahan yang dikembalikan darikillall
perintah, jika prosesnya tidak ada. Bagianecho
hanya akan bertindak, jikakillall
kembali1
, sementara itu sendiri akan kembali0
(sukses).sumber
killall -q
lebih baikkillall -q
tidak didukung pada semua rasa unix, macOS Catalina masih belum memilikinya.coba gunakan:
di mana process_name adalah nama proses yang ingin Anda bunuh. Apa yang hebat tentang ini adalah bahwa pidof akan mendaftar pid dari semua proses yang cocok dengan nama yang diberikan. Karena membunuh menerima beberapa pid, itu akan membunuh mereka semua dalam satu tingkah.
Beri tahu saya jika ini membantu.
sumber
kill `pidof process_name
. Jika itu mengembalikan daftar kosong, lewati panggilan bunuh.Naskah Kecil yang saya buat dengan R&D. Saya harap Anda akan menyukainya
simpan dengan beberapa nama seperti script.sh lalu
Kemudian berikan nama proses Anda.
Catatan: Saya sudah mencoba berkali-kali dengan ini dan baik-baik saja.
sumber
Periksa apakah ada proses dengan
pidof
. Jika ya, bunuhlah:Kode keluar selalu 0 setelah menjalankan perintah di atas.
sumber
Gunakan
pkill
dengan opsi-f
Opsi
-f
adalah pola yang biasanya cocok dengan nama proses.sumber
Saya akan menggunakan:
The
xargs -r
memberitahu untuk menjalankan membunuh hanya jika ada masukan. Theps --no-header -eo pid,cmd
mendapat output ke format yang lebih baik untuk parsing.sumber