Çalışan bir terminal programının İşlem Kimliği (PID) nasıl bulunur?


Yanıtlar:


128

Başka bir terminal açın ps ax | grep foove yanıt vermeyen programın adı foo'dur. Bu şuna benzeyen bir çıktı satırı döndürmelidir:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

Her çıktı satırının ilk alanı, eşleştirilen programın İşlem Kimliğini temsil eden bir sayıdır grep(sonuncuyu güvenli bir şekilde görmezden gelebilirsiniz, bu da grepkendisini temsil eder).

Sorunlu süreci durdurmak için şunları yapın: kill pidpid programın İşlem Kimliğidir. Kararınızı hangilerinin eşleştirilmesi gerektiği konusunda killkullanmak zorunda kalabilirsiniz veya topbunun yerine kullanabilirsiniz . killKendi başına kullanmak , programın kendisinden sonra düzgün bir şekilde temizlenmesini sağlayan ilk denemeniz gereken SIGTERM'i gönderir. SIGTERM başarısız olursa, kuvvetlendirir ilaçtır SIGHUP, deneyin: kill -HUP pid. Her şey başarısız olursa, SIGKILL'i yollayın. Ancak, bunu yalnızca son çare olarak yapmalısınız, çünkü SIGKILL, çekirdeğin temizleme için derhal işlemi sonlandırmasına neden olmaz. Bu, bazen veri bozulmasına veya başka sorunlara neden olabilir. Bu yüzden tekrar, sadece son çare olarak SIGKILL gönder. Bunu yapmak için kill -KILL pidveya yapın kill -9 pid.

Grafik bir arayüz kullanıyorsanız, elbette, işi yapmak için bu çılgın komut satırı işleriyle kandırmanıza gerek yok. Sadece "Sistem Monitörü" nü açın, İşlemler sekmesine gidin, durdurmak istediğiniz işlemi seçin (Hm,% 90 CPU'yu kullanan olabilir mi?) Ve sağ tıklayın. İşlem zaten durdurulduğundan, (sorun değil mi?) Sonuçta ortaya çıkan menüden İşlemi Sonlandır veya İşlemi Sonlandır'ı seçin.

Koanhead'e Kredi


5
Diğer tüm yöntemler başarısız olmadıkça, insanlar asla SIGKILL (-9 öldür) kullanmamalıdır. Sadece liste kill -9kötü tavsiyedir. Düzeltmek için cevabı değiştirdim.
Scott Severance

Özel bir fonksiyonun pidini nasıl bulabilirim. Ve pingkomutuyla bir döngü içeren bir işleve sahibim sleep. Unix.stackexchange.com/a/275826/72988’e göre Ubuntu’da olmadan mümkün değildir multiplexer.
Timo

49

Aynı komutları pgrep, pkill, pidof vb. İle yapabildiğiniz zaman bu kadar uzun komutlara ihtiyaç olduğunu sanmıyorum.

  • Çalışan Programın ücretini almak için

pgrep:

   pgrep [options] pattern

AÇIKLAMA: pgrep şu anda çalışmakta olan işlemlere bakar ve seçim kriterlerini stdout ile eşleşen işlem kimliklerini listeler. Bütün kriterlerin eşleşmesi gerekiyor. Örneğin,

  • Root'un sahip olduğu sshd isimli süreci bulmak.

    $ pgrep -u root sshd
    
  • Kök VEYA daemon'a ait işlemleri listeler.

    $ pgrep -u root,daemon
    

pidof:

AÇIKLAMA :

Pidof, adlandırılan programların işlem kimliklerini (pids) bulur. Bu kimlikleri standart çıktıya yazdırır.

sözdizimi: pidof program_name

  • Bir programı pid ile öldürmek için pkill örneği kullanın:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -fflag: İşlem_adı'nı arar (bkz. man pkill)
    -oflag: Eşleşen işlemlerden yalnızca en eski olanı seçin.
    -nbayrak: Yalnızca eşleşen işlemlerin en yenisini seçin.
    -lflag: İşlem adını ve işlem kimliğini listeleyin.


1
Bu en iyi cevaptır
BlackDivine

21

Çalışan bir programın yardımını bilmenin en kolay yolu şunları kullanmaktır:

pidof <application name>

Örneğin, vim başlattıysanız ve ücretini bilmek istiyorsanız:

pidof vim

Unutmayın, başlatılan tam program adını vermeniz gerekecek.

Örneğin, vi kullanıyorsanız ve çalıştırdığınızda pidof vimdoğru sonuçlar alamazsınız.

Daha pidoffazla bilgi için kullanım kılavuzuna bakınız .


Bu varsayılan olarak yüklenmemiş. Sysvinit-utils paketinde olabilir.
flickerfly

MariaDB'yi aldım. pidof mysqldbir PID döndürür. Ancak, eğer bir pidof Mariadbşey yazmazsam döndürülür. Hem MariaDB hem de MySQL için aynı PID mi?
Pathros

18

Daha açıklayıcı bir çıktı elde etmek için "-i" ekleyerek ve "ax" yerine "aux" kullanarak büyük / küçük harf duyarlı bir arama kullanmanın güzel olduğunu gördüm:

ps aux | grep -i firefox

Kullanabileceğiniz tüm işlemleri öldürmek istiyorsanız:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

Bu güçlü bir ölüm. Yumuşak bir öldürme istiyorsanız, "-9" bırak.


5
Bu aynı zamanda ps aux | grep -i firefox...işlemi de öldürür , çünkü firefoxkomutun içindeki metni içerir !
Eric,

1
@Eric, grep -i firefo[x]sadece firefox'la eşleştirmek için kullanabilirsiniz
AD

@ john-foley kullanmak tavsiye asla -9birlikte kill, bakınız burada açıklamalar
AD

3

Sadece pid isterseniz (autokill scriptleri, vb. İçin yararlıdır)

pgrep -f desired_program_name

1

Ubuntu 16.04 LTS çalışan kişiler için, sen gerekir kullanmak ps axve sadeceps aksi takdirde sadece konum özellikle terminali örneğinden yumurtlama işlemlerini alacak, komut satırına. (Genellikle sadece 'Bash' [içindesin kabuk ] ve 'ps' [az önce koştuğunuz]


Seviyorum ps -e(hepsini gösterir) ve ps -ejH(bir süreç ağacını gösterir).
Andrew,

1
@Andrew güzel, bu aslında oldukça tatlı - bahşiş için teşekkürler
cygnus_x1 16

0

Ayrıca top, Sistem Monitörü'nün metin bir sürümü olan başka bir terminal açabilir (veya başka bir tty'ye geçebilir) ve çalıştırabilirsiniz . İlk sütun K, PID'ye girip ardından göndermek için sayısal bir sinyal girerek öldürebileceğiniz her çalışan işlemin PID'sini listeler .


0

Yapabilirsin:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

önce iki boru işlem bilgisi alır, sonra eski okul kesimini kullanarak PID sütunu almaya çalışırız, sonra ortaya çıkan PID'yi öldürmek için veririz.


kill -9Bir süreci öldürmek zorunda olduğunuz en büyük silahtır. SIGKILL'a başvurmadan önce, sürecin kaynaklarını temizleme şansı vermek için daha yumuşak bir sinyal almaya çalışmalısınız.
Byte Commander

@ByteCommander bu doğru. İşi yapacak bir liner yapmak istedim.
Arian Soltani

0
top

veya

screen -list|ls

tüm ödemeleri karşılık gelen işlem ile listeleyin

kill -[pid]
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.