Bash skrip untuk menemukan dan membunuh proses dengan argumen tertentu?


17

Saya ingin skrip yang membunuh instance sshyang dijalankan dengan argumen -D (menyiapkan proxy lokal).

Secara manual, saya lakukan ps -A | grep -i ssh, cari instance dengan -D, dan kill -9 {id}masing - masing.

Tapi seperti apa bentuk bash script itu?

(Saya menggunakan Mac OS X tetapi akan menginstal perintah yang diperlukan melalui port)


Lihat alternatif pgrep dan pkill di mac os x? . pgrepdan pkillmerupakan perintah untuk secara andal menemukan atau membunuh proses dengan nama di bawah Solaris dan Linux.
— Gilles 'SO- stop being evil'

Jawaban:


26

Jalankan pgrep -f "ssh.*-D"dan lihat apakah itu mengembalikan ID proses yang benar. Jika ya, cukup ubah pgrepke pkilldan pertahankan pilihan dan pola yang sama

Juga, Anda tidak boleh menggunakan kill -9alias SIGKILL kecuali benar-benar diperlukan karena program tidak dapat menjebak SIGKILL untuk membersihkan sendiri sebelum mereka keluar. Saya hanya menggunakan kill -9setelah mencoba -1 -2dan -3.


Anda harus mendefinisikan kembali kill sebagai forloop yang cocok kill -iuntuk masing-masing i;)
— Seamus

1
pgrepbukan asli pada OSX, Anda harus mendapatkannya dari pihak ketiga. Utas sebelumnya pada topik memiliki proposal dan alternatif.
— Gilles 'SO- stop being evil'

manusia hidup, semakin aku menggunakan 'nix, semakin aku menyukainya :) terima kasih untuk ini!
— javamonkey79

pgrep dan pkill tersedia di OS X 10.8 (Mountain Lion) dan di atasnya. apple.blogoverflow.com/2012/07/...
— Peter Hanley

Mungkin bermanfaat untuk menambahkan -aflag pgrepyang membuatnya mencetak tidak hanya id proses tetapi juga perintah (termasuk argumen). Dengan cara ini sangat mudah untuk memverifikasi bahwa hanya proses yang diinginkan yang cocok.
— luator


0

Anda dapat memanfaatkan sistem file proc untuk mengumpulkan informasi. Sebagai contoh:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Itu tidak sempurna, Anda akan menginginkan regex yang lebih eksklusif (terutama jika Anda mematikan proses) tetapi echo $proc | awk -F'/' '{ print $3 }'akan menunjukkan kepada Anda PID dari proses tersebut.


1
OSX tidak punya /proc. Dan sudah ada alat yang kuat untuk melakukan ini di luar sana, yang disebut pgrep(tersedia secara native setidaknya di Solaris dan Linux).
— Gilles 'SANGAT berhenti menjadi jahat'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.