Script shell ke -9 kill berdasarkan nama

28

Apakah ada cara (mungkin skrip) cara mengotomatiskan proses ini:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Sayangnya, pkillini terlalu lemah karena saya harus menggunakan -9opsi aktif kill.

mreq
sumber
2
Anda dapat menggunakan -9dengan pkillterlalu ...
Stop Harming Monica
6
Menurut saya, itu lebih elegan dan layak digunakan -KILLdaripada -9. Nomor apa yang sesuai dengan sinyal apa yang bergantung pada implementasi. SIGKILLkebetulan berada 9di Linux i386 dan Linux amd64, tetapi tidak harus di mana-mana. ( Info lebih lanjut di sini. )
Eliah Kagan
5
@EliahKagan: sementara saya ingin menggunakan -KILLterlalu (karena membuat kode lebih mudah dibaca), perlu dicatat bahwa SIGKILL = 9ini ditentukan oleh POSIX , sehingga -9cukup portabel saat ini (dan tidak tergantung pada kernel atau arsitektur).
Andrea Corbellini

Jawaban:

36

Anda dapat menggunakan shell Anda untuk melakukan tugas ini untuk Anda:

kill -9 $(pidof middleman)

Shell mengeksekusi perintah pidof middlemanterlebih dahulu. Output dari pidof (8) adalah id proses. Jadi shell mengganti pidofperintah-dengan id proses dan mengeksekusi kill -9 18845(atau apa pun id proses yang benar).

qbi
sumber
Apa perbedaan antara ini dan kill -9 $(pgrep middleman)?
Aaron Franke
54

Ada solusi yang bahkan lebih sederhana daripada qbi: killallmari kita bunuh proses dengan nama, dan Anda dapat menentukan sinyal.

killall -9 middleman

Lihat man killalluntuk informasi lebih lanjut dan opsi tambahan (ada beberapa).

Seperti namanya, ini mengirim sinyal ke semua proses yang dinamai middleman. Tapi itu tidak berbeda dari cara lain (seperti pkill). Selanjutnya, pkill -9 middlemanakan menargetkan proses yang namanya cocok tetapi tidak sama middleman, seperti middleman2, juga.

Burger Gerhard
sumber
2
killallUntuk kemenangan!
Andrea Corbellini
4
bunuh semua tengkulak? oh sayang ...
Tobias Kienzler
16

Jawaban lainnya sepenuhnya benar, tetapi saya mungkin juga menambahkan opsi ketiga sehingga semua didokumentasikan di sini. Anda juga bisa menggunakan:

pkill -9 middleman

Lihat man pkilluntuk informasi lebih lanjut dan opsi tambahan.

Tidak masalah metode mana yang Anda gunakan. Mereka semua akan bekerja. Tetapi mengetahui opsi jika berguna jika Anda ingin mengubah perilaku dalam beberapa cara, karena halaman manual yang sesuai menunjukkan opsi pencocokan apa yang tersedia.

Robie Basak
sumber
Aneh, tidak bekerja di sini. Tidak jugamiddleman*
mreq
1
Ah. Melihat lebih dekat, sepertinya Anda ingin membunuh penerjemah ruby, daripada proses yang benar-benar disebut middleman. Di sinilah perbedaan dalam bagaimana tepatnya pkill, killall, pidofdan grepproses pertandingan benar-benar mulai peduli!
Robie Basak
12
pkill -9 -f middleman

The -fpilihan membuatnya cocok baris perintah yang lengkap, bukan hanya nama proses.

Perhatikan bahwa itu -9harus menjadi sinyal terakhir, bukan sesuatu untuk digunakan secara rutin.

Jlliagre
sumber
1
Terima kasih! Saya sangat suka kemampuan untuk mencocokkancomplete command line
cwd
baris perintah lengkap sangat keren!
okwap
10

Hanya untuk bersenang-senang, saya ingin menambahkan cara lama yang lebih manual

kill -9 `ps aux | grep middleman | awk '{print $2}'`
slipset
sumber
1
Saya melakukan itu di tempat kerja beberapa tahun yang lalu dan admin memberi saya pandangan yang mengatakan "oke, grandad". Dapat juga menambahkan grep -v grep sebelum awk untuk memastikan itu tidak mematikan perintah grep juga.
Iain Holder
@gerhard, terima kasih atas hasil editnya, tidak dapat menemukan kutu belakang di iPad saya. grep -v adalah ide yang bagus ...
slipset
Cara sekolah tua yang sebenarnya adalah menulis ... grep [m]iddleman ...untuk menghindari pembunuhan grepproses secara tidak sengaja. Dengan begitu grep tidak dapat menandingi dirinya sendiri karena kutipan lucu.
Mikko Rantalainen
1
killall -9 -ir regex_pattern

yang interaktif (aman) dan cocok dengan nama perintah parsial.

Bohr
sumber