Bir işlemin kimliğini bulma ve öldürme


16

Bir arka plan sürecini öldürmem gerektiğinde ps -e | grep <process_name>

Hangi böyle bir şey yazdırır 1766 ? 00:00:13 conky, o zaman süreç kimliği killbunu böyle kullanın kill 1766.

Bunu basitleştirebilmemin bir yolu var mı? Daha hızlı yap? yazma miktarını azaltmak?


1
İstediğim yanıtı aldım, ama kabul etmeden önce biraz bekleyeceğim, böylece topluluk mevcut çeşitli seçeneklerden faydalanabilir.
Gautam

Yanıtlardan daha fazla insanın yararlanabilmesi için lütfen bu soruyu daha genel hale getirmekten çekinmeyin
Gautam

Yanıtlar:


19

(TL, DR: pgrep, pkill)

Birçok unix ile gelen varyantları pgrepve arkadaşı pkill: Solaris , Linux (bir parçası standart süreç kamu gömülü Linux sistemlerinde mevcut olmayabilir,), FreeBSD , OpenBSD , NetBSD , ... ama sadece OS X üzerinde MacPorts , değil AIX ve sadece son zamanlarda HP-UX'te . Yardımcı pgrepprogram, ad, kullanıcı ve diğer birkaç ölçütle eşleşen işlemlerin işlem kimliğini gösterir. pgrepTo argümanı , işlemin yürütülebilir adının bir kısmıyla eşleşmesi gereken bir normal ifade olarak yorumlanır (bunu değiştirmek için bir seçenek iletmezseniz). Eğer ararsanız pkillyerinepgrep, yardımcı program işlem kimliklerini görüntülemek yerine bir sinyal gönderir.

Başka bir benzer yarar pidof'tur . On Linux , bu sağladığının sysvinit veya BusyBox (genellikle yoktur gömülü Linux sisteminde bulacaksınız böylece pgrep); diğer unix varyantlarında da bağlantı noktaları vardır. Yardımcı pidofprogram daha az seçeneğe sahiptir, çoğunlukla yalnızca tüm yürütülebilir dosya adlarıyla eşleşir. Tamamlayıcı yardımcı programı killalleşleşen programlara bir sinyal gönderir¹.

Solar Solaris ve muhtemelen diğer unix varyantları üzerinde farklı bir anlama sahip olduğuna dikkat edin killall; yazmayın killallSolaris üzerinde root olarak.


Vay be cevap çok detaylı, çok daha derinlemesine, teşekkürler. Lütfen mümkünse yanıtı eşleştirmek için soruyu düzenleyin.
Gautam

@GautamK Sorunun genişlemesi gerektiğini düşünmüyorum. Bunu yaparsanız, kendiniz düzenlemekten çekinmeyin.
Gilles 'SO- kötü olmayı bırak

En çok oy alan cevaplar Cevabınız daha fazla ayrıntı veriyor, bu yüzden kabul
ediyorum

8
  • killall ProcessName (bir programın işlem adını her zaman bilmemeniz nedeniyle bu komutla ilgili bir dezavantaj vardır).
  • pidof ProccessName ve kill the result form pidof
  • ps xu | grep <process name> | grep -v grep | awk '{ print $2 }' | xargs kill -9 Bu tek satırı deneyin ve bashınızın geçmişini yeniden kullanın veya daha iyi bir takma ad oluşturun.

İkincisi pidofbiraz daha kolay görünüyor, ama yine de 2 adım atıyor
Gautam

Bir adımda (kaba işlem adıyla) bunu yapan bir satır komutu arayabilir / oluşturabilirim, ancak bu, uzun bir satır (yukarıdaki iki adımdan daha zor) yazmanızı gerektirir veya bir kez yazabilirsiniz ve tarihi yeniden kullanır.
Hanan N.

@GautamK Cevabı tek komut seçeneğiyle güncelledim.
Hanan N.

6

Hanan bazı iyi öneriler vardır, ben ekleyeceğim pgrep/ pkill. Hangi işlemi bulduğunuz üzerinde çok daha iyi bir kontrole ve öldürmeniz gereken kesin süreci bilmiyorsanız düzenli ifadelere izin verir.

PS Hanan'ın direkleri direk pidofolarak beslenebilir kill:

kill `pidof processname`

pkilltam olarak aradığım şeydi, çoğu zaman süreç adını biliyorum, Çoğunlukla onun conkyya firefoxda chromeya da bunun gibi bir şey. Teşekkürler
Gautam

1

Buna ne dersin -

ps -e | awk '$4~/<process name>/{print $1}' | xargs kill

Misal:

[jaypal:~/Temp] sleep 100&
[1] 74863
[jaypal:~/Temp] ps -e | awk '$4~/sleep/{print $1}' | xargs kill
[1]+  Terminated: 15          sleep 100

Güncelleme:

Bunu yapmanın iyi bir yolu eklemek olacaktır böylece Maalesef bu besbelli az yazarak şartını karşılamadığı functionsizin için .bashrc, .profileya da her türlü başlatma komut. İşlev böyle bir şey olabilir -

killp() {
awk -v pname="$1" '($4==pname){print $1}' <(ps -e) | xargs kill
}

Eklendikten sonra, işleminizin adını iletebilirsiniz:

[jaypal:~] sleep 100&
[1] 77212
[jaypal:~] killp sleep
[1]+  Terminated: 15          sleep 100
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.