Saya ingin skrip yang membunuh instance ssh
yang 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
)
pgrep
danpkill
merupakan perintah untuk secara andal menemukan atau membunuh proses dengan nama di bawah Solaris dan Linux.Jawaban:
Jalankan
pgrep -f "ssh.*-D"
dan lihat apakah itu mengembalikan ID proses yang benar. Jika ya, cukup ubahpgrep
kepkill
dan pertahankan pilihan dan pola yang samaJuga, Anda tidak boleh menggunakan
kill -9
alias SIGKILL kecuali benar-benar diperlukan karena program tidak dapat menjebak SIGKILL untuk membersihkan sendiri sebelum mereka keluar. Saya hanya menggunakankill -9
setelah mencoba-1
-2
dan-3
.sumber
for
loop yang cocokkill -i
untuk masing-masingi
;)pgrep
bukan asli pada OSX, Anda harus mendapatkannya dari pihak ketiga. Utas sebelumnya pada topik memiliki proposal dan alternatif.-a
flagpgrep
yang 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.Juga,
sumber
pkill
Anda dapat memanfaatkan sistem file proc untuk mengumpulkan informasi. Sebagai contoh:
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.sumber
/proc
. Dan sudah ada alat yang kuat untuk melakukan ini di luar sana, yang disebutpgrep
(tersedia secara native setidaknya di Solaris dan Linux).