Jak zabijać procesy w Ubuntu?


149

Jak zabić wszystkie procesy uruchomione na moim koncie użytkownika innego niż root?

Mam kilka wirujących procesów smbd, które spowodowałem z mojego komputera z systemem Windows, więc telnetowałem się do serwera Linux i chcę je zabić. Nie mam uprawnień do ponownego uruchamiania usług lub ponownego uruchamiania komputera.

Odpowiedzi:


172

Aby zabić wszystkie procesy, które masz uprawnienia, po prostu uruchom polecenie

kill -15 -1lub w kill -9 -1zależności od pożądanego zachowania (użyj man killdla szczegółów)

Aby zabić określony proces, powiedzmy, firefox, po prostu uruchom

pkill firefoxlub w killall firefoxzależności od pożądanego zachowania: Jaka jest różnica między „killall” a „pkill”?

Jeśli chcesz zobaczyć, jakie procesy są uruchomione, użyj polecenia

ps -ef

Jeśli chcesz sprawdzić wszystkie procesy według użytkownika robota, może to pomóc

pgrep -l -u bob

lub

ps -ef | grep bob

4
Zaczynam od kill -15 -1i przechodzę do tego, kill -9 -1jeśli istnieją uparte procesy i wiem, co robię . Losowe zabijanie procesów, które mogą być w trakcie transakcji bazy danych, nie jest czymś, co należy robić tak swobodnie, jak sugerujesz.
Simon Richter

Nazywany jest także proces Firefoksa firefox-bin.
Simon Richter

Nie, można spróbować uruchomić killall firefoxi killall firefox-bini zobaczyć, co działa. Zgadzam się z twoim pierwszym komentarzem.
ste_kwr

Dzięki @ste_kwr, pracowałem z twoimi instrukcjami, po tym, jak
walczyłem

Zaletą tego, że nie potrzebują PID, są zadania cron. Używanie nazw działa poprawnie.
SDsolar

56

Użyj sudo kill <pid>lubsudo killall <process-name>


3
Nie sądzę, żeby miało to związek z tym pytaniem, używasz sudo - OP nie ma takich uprawnień, jak wspomniano w pytaniu.
pl1nk

OP nie ma uprawnień, edytuj swoją odpowiedź lub może zostać usunięty lub przekształcony w komentarz jako „brak odpowiedzi”.
ish

Jeśli nie ma uprawnień, musi po prostu zabić <pid> lub killall <process-name> Właśnie użyłem go na moim koncie użytkownika innego niż root, nie byłbym w stanie tego zrobić, gdyby nie ta odpowiedź .
Shailyn Ortiz

20

Spróbujmy czegoś więcej:

sudo apt-get install htop 

topKomenda jest w tradycyjny sposób, aby wykorzystanie zasobów systemu, a zobaczyć procesy, które zajmują najwięcej zasobów systemowych. Na górze wyświetla się lista procesów, przy czym te, które wykorzystują najwięcej procesora na górze.

htopwyświetla te same informacje w łatwiejszym do zrozumienia układzie. Pozwala także wybierać procesy za pomocą klawiszy strzałek i wykonywać czynności, takie jak ich zabijanie lub zmiana ich priorytetu za pomocą Fklawiszy.


16

Możesz użyć

ps -ax | grep application name 

Jeśli szukasz typu firefox w terminalu podobnym ps -ax | grep firefox, pokazuje identyfikator procesu odpowiedniej aplikacji. Możesz zatrzymać tę aplikację za pomocą killkomendy, jeśli proces id = 1317,

kill -9 1317

13

Chciałbym użyć xkill. Wprowadź xkillw terminalu i kliknij w oknie lub wprowadź xkilli identyfikator procesu, a zostanie on zakończony.

Dowiedz się więcej o xkillna x.org.


1
Użyj go na drugiej częstotliwości po tym, jak pkill go pokocha. +1
Sergiy Kolodyazhnyy

xkill nie działa w tym przypadku ...
PythoNic

@PythoNic w jakim przypadku?
Alvar,

1
Chce zabić proces nie będący oknem, który również nie jest związany z serwerem X, jak mi się wydaje ... (W każdym razie dobre narzędzie.)
PythoNic

9

Aby spróbować zabić wszystkie procesy należące do użytkownika username, uruchom:

pkill -U username

7

Podzielę twój problem na 2 części:

1) Jak znaleźć procesy rozpoczęte przeze mnie? Uruchomić to:

ps -u `whoami`

whoamiJest tylko w przypadku, gdy nie wiem, nazwę konta, którego używasz, w przeciwnym razie po prostu wpisz nazwę konta bez cudzysłowów pleców.

Spowoduje to wyświetlenie listy wszystkich procesów, które można usunąć z konta.

2) psPolecenie wyświetli numer procesu, TTY, czas i CMD. Identyfikator procesu to pierwsza kolumna. Użyj tego numeru, aby zabić proces. Uważaj podczas zabijania procesu. Możesz coś zepsuć, jeśli zabijesz niewłaściwy proces. Aby zabić proces, użyjesz killpolecenia, które wyśle ​​SYGNAŁ do procesu. Sygnał wskazuje, co powinien zrobić proces . Na przykład, wysłanie a -1do procesu poprosi go o ponowne załadowanie pliku konfiguracyjnego; wysłanie a -2jest równoznaczne z naciśnięciem Control + C na tym procesie; -9spowoduje, że jądro porzuci proces, bez przekazywania go do procesu.

Załóżmy, że ps -u whoamizwróciło coś takiego

  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

I chciałeś zabić firefoxproces według jego identyfikatora procesu, a następnie zrobiłbyś:

kill -1 7667

Następnie ponownie uruchom to samo pspolecenie i sprawdź, czy proces nadal działa. Jeśli nadal działa, zrób to

kill -2 7667

pracujesz na swój sposób -9.

Aby zabić wszystkie procesy rozpoczęte przez twoje konto, wpisz kill <level> -1. Tak samo jak poprzednio: pracuj do góry -9.

Jeśli znasz nazwę procesu, możesz po prostu iść tam killall <processname>, gdzie próbujesz go zabić. Na przykład: killall fish(ryba, w tym sensie, to Friendly Interactive SHell).

Dokumentację killallmożna znaleźć tutaj: http://manpages.ubuntu.com/manpages/hardy/man1/killall.1.html


3

Dzięki tej aplikacji możesz przeglądać listę programów

zainstaluj htop

sudo apt-get install htop

zobacz proces procesu i zabicia Możesz go zainstalować i po prostu usunąć

wprowadź opis zdjęcia tutaj


2

... Wszystkie procesy w Linuksie odpowiadają na sygnały. Sygnały są na poziomie systemu sposobem mówienia programom o zakończeniu lub modyfikacji ich zachowania.

Jak wysyłać sygnały procesów przez PID

Najczęstszym sposobem przekazywania sygnałów do programu jest polecenie kill.

Jak można się spodziewać, domyślną funkcją tego narzędzia jest próba zabicia procesu:

kill PID_of_target_process

To wysyła sygnał TERM do procesu. Sygnał TERM nakazuje procesowi zakończenie. Dzięki temu program może wykonywać operacje czyszczenia i płynnie wychodzić.

Jeśli program działa nieprawidłowo i nie wychodzi, gdy otrzyma sygnał TERM, możemy go eskalować, przekazując sygnał KILL:

kill -KILL PID_of_target_process

Jest to specjalny sygnał, który nie jest wysyłany do programu.

Zamiast tego jest przekazywany do jądra systemu operacyjnego, co zamyka proces. Służy to do omijania programów, które ignorują wysyłane do nich sygnały ...


2

Napisałem mały skrypt, który napisałem, aby zabić (w moim przypadku) Skype:

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

Ale odkryłem, że o ile to wtedy działało, to nie zadziałało następnego dnia, ponieważ pid miał inną długość i tam była inna ilość miejsc

Potem natknąłem się na tę stronę i spróbowałem

pgrep -l -u justin

który dogodnie wyprowadza procesy w formacie

[pid] [name]

Więc dostosowałem swój kod w skrypcie do tego:

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

Robi to potoki, w których działają wszystkie procesy justin(które można zmienić na dowolną nazwę użytkownika), grepktórych szuka skype(to można zmienić na swój proces), a następnie potokuje linię, do cutktórej następnie odczytuje tylko PID i na końcu używa tego PID w killpoleceniu, aby go zabić.


Mogłeś upuścić -li pobiec pgrep -u justin skypei zabić: pkill -u justin skype(lub pkill -KILL -u justin skypewysłać SIGKILL).
muru

Jest to zdecydowanie sposób uniksowy. Dobra robota. Użyję tego.
SDsolar

1

Oto prosty skrypt Pythona, który napisałem, killProcess.py, który przyjmie wszystko jako dane wejściowe i zabije to.

Napisałem ten skrypt, ponieważ mam wiele procesów python lub węzłów, które chcę zabijać indywidualnie i programowo. Nie mogę użyć „killall python”, ponieważ spowoduje to zatrzymanie procesów, które muszę kontynuować.

Nazwij plik „killProcess.py”, a następnie dodaj nazwę skryptu, który chcesz zatrzymać. Np .: python killProcess.py runnablePoller.py zabije plik runnablePoller.py

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

Użyłem następującej procedury, aby zabić proces w Ubuntu ::

Krok 1: Uzyskaj pid procesu za pomocą grep lub możesz użyć -C również:

ps aux | -C 'filename'

lub

ps -ef | -C 'filename'

lub

ps aux | grep 'filename'

lub

ps -ef | grep 'filename' 

Krok 2: Zanotuj numer pid.

Krok 3: Użyj polecenia „zabij” wraz z numerem pid jako:

kill pidnumber

0

Ctrl+ Alt+ Deletemożna ustawić, aby uzyskać dostęp do menedżera zadań, z którego łatwo jest zabijać procesy za pomocą kilku kliknięć, a dla mnie mniej wymagań dotyczących zapamiętywania poleceń, które mogą być szkodliwe, jeśli zostaną wykonane źle:

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/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.