Ubuntu'da süreçleri nasıl öldürebilirim?


149

Kendi root dışı hesabımla çalışan tüm işlemleri nasıl öldürebilirim?

Windows makinemden kaynaklanan bazı eğirme smbd işlemlerine sahibim ve bu yüzden linux sunucusuna telnetledim ve bu eğirme işlemlerini öldürmek istiyorum. Hizmetleri yeniden başlatma veya makineyi yeniden başlatma yetkim yok.

Yanıtlar:


172

Öldürme izniniz olan tüm işlemleri öldürmek için, sadece komutu çalıştırın.

kill -15 -1veya kill -9 -1istenen davranışa bağlı olarak ( man killayrıntılar için kullanın )

Belirli bir işlemi, örneğin firefox'u öldürmek için çalıştırın.

pkill firefoxveya killall firefoxistediğiniz davranışa bağlı olarak: 'killall' ve 'pkill' arasındaki fark nedir?

Hangi işlemlerin çalıştığını görmek istiyorsanız, bu komutu kullanın.

ps -ef

Tüm işlemleri kullanıcı bob ile aramak istiyorsanız, bu yardımcı olabilir

pgrep -l -u bob

veya

ps -ef | grep bob

4
Başlayacağım kill -15 -1ve sadece kill -9 -1inatçı süreçler varsa devam edeceğim ve ne yaptığımı biliyorum . Bir veritabanı işleminin ortasında olabilecek işlemleri rasgele öldürmek, önerdiğiniz gibi rasgele yapmanız gereken bir şey değildir.
Simon Richter

Ayrıca, Firefox’un işlemine ad verilir firefox-bin.
Simon Richter

Hayır, çalışan deneyebilirsiniz killall firefoxve killall firefox-binve işe yaradığını görüyoruz. İlk yorumunuzla aynı fikirdeyim.
ste_kwr

Thanks @ste_kwr, talimatlarınızla, iki gün boyunca mücadele ettikten sonra ...
Java.beginner

PID'lere ihtiyaç duymamanın avantajı cron işlerinde. İsimleri kullanmak temiz çalışır.
SDsolar

56

Kullanın sudo kill <pid>veyasudo killall <process-name>


3
Bunun bu soruyla alakalı olduğunu sanmıyorum, sudo kullanıyorsunuz - OP'nin söz konusu gibi ayrıcalıkları yok.
pl1nk

OP ayrıcalıklarına sahip değil, lütfen cevabınızı düzenleyin, aksi takdirde "cevap değil" olarak silinebilir veya bir yoruma dönüştürülebilir.
ish

Ayrıcalıkları yoksa sadece öldürmek zorunda <pid> veya killall <process-name> Ben sadece root olmayan hesabımda kullandım, bu Cevap olmasaydı yapamam. .
Shailyn Ortiz

20

Daha fazlasını deneyelim:

sudo apt-get install htop 

topKomut sisteminizin kaynak kullanımını görüntüleyebilir ve en sistem kaynaklarını alıyor süreçleri görmek için geleneksel bir yoludur. Top, en çok CPU kullananları içeren işlemlerin bir listesini görüntüler.

htopaynı bilgiyi anlaşılması kolay bir düzende gösterir. Ayrıca, ok tuşlarıyla işlemleri seçmenize ve onları öldürme veya önceliğini değiştirme gibi işlemleri tuşlarla gerçekleştirmenize olanak tanır F.


16

Kullanabilirsiniz

ps -ax | grep application name 

Eğer terminalinizde firefox türünü arıyorsanız ps -ax | grep firefox, ilgili uygulamanın işlem kimliğini gösterir. killİd = 1317 ise, bu uygulamayı komut ile durdurabilirsiniz ,

kill -9 1317

13

Kullanırdım xkill. Gir xkillbir terminalde ve pencere tıklayın veya girmek xkillve süreç kimliği ve sonlandırılacaktır.

Daha öğrendim xkillüzerine X.Org'u.


1
İlk sevişmeden sonra ikinci frekansı kullanın. +1
Sergiy Kolodyazhnyy


Bu durumda @ PythoNic nedir?
Alvar

1
Benim için göründüğü gibi, X sunucusuyla da ilgili olmayan bir pencere dışı süreci öldürmek istiyor ... (Her neyse, iyi bir araç.)
PythoNic

9

Bir kullanıcının sahip olduğu tüm işlemleri öldürmeye çalışmak için aşağıdakileri usernameçalıştırın:

pkill -U username

7

Sorunu 2 parçaya bölerdim:

1) Başladığım süreçleri nasıl bulabilirim? Bunu çalıştır:

ps -u `whoami`

Kullandığınız whoamihesabın adını bilmemeniz durumunda, tersini belirtmeden hesabın adını yazmanız yeterlidir.

Bu, hesabınız tarafından silinebilecek tüm işlemleri listeler.

2) psKomut, işlem numarasını, TTY, Time ve CMD'yi listeler. İşlem kimliği ilk sütundur. Süreci öldürmek için bu numarayı kullanın. Süreci öldürürken dikkatli olun. Yanlış süreci öldürürseniz bir şeyleri kırabilirsiniz. Bir işlemi öldürmek için işleme killbir SİNYAL gönderen komutu kullanacaksınız . Sinyal, işlemin ne yapması gerektiğini gösterir . Örneğin -1, işleme bir a gönderilmesi , yapılandırma dosyasını yeniden yüklemesini ister; a gönderme -2, bu işlemdeki Control + C tuşlarına basmaya eşdeğerdir; -9çekirdeğin, sürece iletmeden süreci terk etmesine neden olur.

Diyelim ki ps -u whoamiböyle bir şey döndürdü

  PID TTY          TIME CMD
 4333 pts/1    00:00:00 fish
 4335 ?        00:00:00 fishd
 4816 ?        00:00:00 intellij
 4868 ?        00:50:42 java
 4939 ?        00:00:19 fsnotifier64
 7667 ?        02:49:08 firefox
 7698 ?        00:00:00 unity-webapps-s

Ve firefoxsüreci kendi işlem kimliği ile öldürmek istediniz , sonra yapardınız:

kill -1 7667

Ardından aynı pskomutu tekrar çalıştırıp işlemin devam edip etmediğini kontrol edersiniz . Hala çalışıyorsa, o zaman bir

kill -2 7667

kadar çalışıyorum -9.

Hesabınız tarafından başlatılan tüm işlemleri öldürmek için, girin kill <level> -1. Daha önce olduğu gibi aynı: kadar yol çalışın -9.

Sürecin adını biliyorsanız basitçe gidebilir killall <processname>, öldürmeye çalıştığınız yer burasıdır. Örneğin: killall fish(balık, bu anlamda, Friendly Interactive Shell'dir).

İçin belgeleri killallburada bulabilirsiniz: http://manpages.ubuntu.com/manpages/hardy/man1/killall.1.html


3

Bu uygulama ile program listelerini görüntüleyebilirsiniz

htop yükleyin

sudo apt-get install htop

süreci görmek ve süreci öldürmek için yükleyebilir ve basitçe silebilirsiniz

görüntü tanımını buraya girin


2

... Linux'taki tüm işlemler sinyallere cevap verir. Sinyaller, programlara davranışlarını sonlandırmalarını veya değiştirmelerini söyleyen bir os-seviyesi yöntemidir.

PID İşlemleri Nasıl Gönderilir?

Sinyalleri bir programa aktarmanın en yaygın yolu kill komutudur.

Tahmin edebileceğiniz gibi, bu yardımcı programın varsayılan işlevi bir işlemi öldürmeye çalışmaktır:

kill PID_of_target_process

Bu, TERM sinyalini işleme gönderir. TERM sinyali işleme sonlandırılmasını bildirir. Bu, programın temizleme işlemlerini gerçekleştirmesini ve sorunsuz bir şekilde çıkmasını sağlar.

Program yanlış çalışıyorsa ve TERM sinyali verildiğinde çıkmıyorsa, KILL sinyalini ileterek sinyali yükseltebiliriz:

kill -KILL PID_of_target_process

Bu, programa gönderilmeyen özel bir sinyaldir.

Bunun yerine, süreci kapatan işletim sistemi çekirdeğine verilir. Bu, kendilerine gönderilen sinyalleri yok sayan programları atlamak için kullanılır ...


2

Öldürmek için yazdığım küçük bir senaryo yazdım (benim durumumda) Skype:

kill -s 9 `ps aux | grep skype | head -n 1 | cut -f4 -d" "`

Ancak o zaman çalıştığım kadarının ertesi gün işe yaramadığını buldum, çünkü ihale farklı bir uzunluktaydı ve oradaki boşluk miktarı farklıydı.

Sonra bu siteye rastladım ve denedim

pgrep -l -u justin

hangi formatta işlemleri rahatça veren

[pid] [name]

Böylece koddaki kodumu şöyle ayarladım:

kill -s 9 `pgrep -l -u justin | grep skype | cut -f1 -d" "`

Bunun ne justinişe yaradığı, tüm işlemlerin çalıştığı (herhangi bir kullanıcı adına göre değiştirilebilir) greparadığı skype(işleminize göre değiştirilebilir) ve daha cutsonra sadece PID'yi okuduğu ve sonunda kullandığı borulardır . killÖldürmek için komuttaki PID .


Düşmüş -lve kaçmış pgrep -u justin skypeve öldürmek için: pkill -u justin skype(veya pkill -KILL -u justin skypeSIGKILL'i göndermek).
muru

Bu kesinlikle Unix Yolu. İkiniz de aferin. Bunu kullanacağım.
SDsolar

1

İşte yazdığım basit bir python betiği, killProcess.py, girdi olarak herhangi bir şeyi kabul edip onu öldürecek.

Bu senaryoyu yazdım çünkü bireysel ve programlı olarak öldürmek istediğim birçok python veya node işlemim var. "Killall python" kullanamıyorum, çünkü çalışmaya devam etmem gereken süreçleri durduracak.

Lütfen "killProcess.py" dosyasını adlandırın, sonra durdurmak istediğiniz betiğin adını ekleyin. Örn: python killProcess.py runnablePoller.py runnablePoller.py dosyasını öldürür

import os;
import sys;
for arg in sys.argv:
    if(arg!="killProcess.py"):
        process=arg;
        print(process);
processes =os.popen("ps -ef | grep "+process).read();
processes=processes.split("\n");
processes=processes[0].split(" ");
#print(processes);
for p in processes:
    try:
        pid=int(p);
        print(pid); 
        break;
    except:
        continue;

os.system("kill "+str(pid));

0

Ubuntu'da bir süreci öldürmek için aşağıdaki prosedürü kullandım:

Adım 1: Grep kullanarak işlemin pidini alın ya da -C'yi de kullanabilirsiniz:

ps aux | -C 'filename'

veya

ps -ef | -C 'filename'

veya

ps aux | grep 'filename'

veya

ps -ef | grep 'filename' 

Adım 2: Pid numarasını not edin.

Adım 3: Pid numarası ile birlikte 'kill' komutunu aşağıdaki gibi kullanın:

kill pidnumber

0

Ctrl+ Alt+ Delete, birkaç tıklamayla işlemleri öldürmenin kolay olduğu yerden ve benim için yanlış yapıldığında zarar verebilecek komutları hatırlamak için daha az gereksinim duymanız için görev yöneticisine erişim sağlayacak şekilde ayarlanabilir:

http://ubuntuhandbook.org/index.php/2013/07/use-ctrl-alt-del-task-manager-ubuntu/

https://www.itsmarttricks.com/a-guide-to-kill-pkill-and-killall-commands-to-stop-the-process-in-linux-kill-process-linux/

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.