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.