In een besturingssysteem zijn er veel programma ‘ s, die door een gebruiker of door het besturingssysteem zelf kunnen worden uitgevoerd (zoals systeemservices). Dergelijke programma ‘ s die op het systeem worden uitgevoerd, worden “processen”genoemd. Meestal, een proces eindigt op zijn eigen wanneer ze klaar zijn met hun taak, of wanneer u hen vraagt om te stoppen door te drukken op een sneltoets of te klikken op de knop “Sluiten”.
echter, soms kan een proces ophangen of veel CPU of RAM gebruiken. In deze situatie, je zou willen handmatig “doden” het proces. In dit artikel zullen we kijken naar verschillende tools die je kunt gebruiken om processen op een Linux systeem te doden.
lokaliseren van het te doden proces
om een proces te doden, moet u eerst de details van het proces vinden. U kunt dit doen door middel van drie commando ‘ s — top
ps
pidof
en pgrep
. Afhankelijk van de situatie, kunt u een van deze commando ‘ s te gebruiken voor dit doel.
zoals we later in dit artikel zullen zien, kunt u een proces doden door zijn naam of zijn proces-ID (PID). De PID is een getal dat een proces uniek identificeert. Killing by the process ID is handig als je alleen een specifiek proces wilt doden. Aan de andere kant is het doden door de procesnaam handig als je alle draaiende instanties van een bepaald programma wilt doden.
het proces lokaliseren met het bovenste Commando
We zullen eerst kijken naar het top
Commando. Start het commando top door te typen:
top
u krijgt een interactieve interface, zoals hieronder getoond. Je kunt door deze lijst bladeren om de naam of de PID van het proces te vinden dat je wilt doden.
om door deze lijst te bladeren, kunt u de Omhoog/omlaag toetsen gebruiken. Bovendien, de top commando heeft ook manieren om processen te filteren op CPU-gebruik, gebruiker en proces Namen, die u kunt lezen over in deze gids.
de meest linkse kolom bevat de PID van het proces, en de rechterkant bevat de programmanaam. Als voorbeeld, in de bovenstaande schermafbeelding hebben we het vnstatd
proces dat draait met een proces ID van 263.
Lokaliseren van het proces met de ps en grep commando ‘ s
een Andere manier om een overzicht te krijgen van het proces is door het uitvoeren van:
ps aux
In het bovenstaande commando, hebben we de flags aux
die hebben de volgende betekenis:
-
a
: Toon processen voor alle gebruikers -
u
: Weergave van de gebruiker die het proces -
x
: Toon alle processen. (Zonder dit zalps
geen processen tonen die draaien in een GUI-omgeving.)
de uitvoer van het commando is vergelijkbaar met die van top
. De PID is beschikbaar in de tweede kolom van links, en de procesnaam is beschikbaar in de meest rechtse kolom.
het voordeel van het gebruik van ps
is dat u deze lijst eenvoudig kunt filteren met de opdracht grep
. Om bijvoorbeeld een proces te vinden dat geassocieerd is met de term “vnstat”, kunt u gebruik maken van:
ps aux | grep -i vnstat
hier kregen we twee resultaten — hetvnstatd
proces, evenals hetgrep
proces. Omdat we op zoek waren naar alle instanties van de term “vnstat”, en we ook grep
draaiden met “vnstat” als argument, kregen we ook grep
in de resultaten.
dus, zelfs als er geen “vnstat” gerelateerde processen draaien, zouden we één regel krijgen die de grep
proces:
dus, hoewel we een resultaat hebben, zijn er geen processen die voor ons interessant zijn.
het vinden van de PID met pidof en pgrep
met de combinatie top
en ps
grep
kunnen we naar processen zoeken. Aan de andere kant, als je de exacte naam van een proces weet, kun je pidof
gebruiken om de PID te vinden.
het gebruik van pidof
is vrij eenvoudig. Om de PID ‘ s van een proces met de exacte naam van “nginx” te krijgen, gebruik je:
pidof nginx
als er processen zijn met de exacte naam van “nginx”, krijg je een lijst met PID ‘ s, zoals hieronder getoond. Als er geen zijn, krijg je niets als de output.
Als u de volledige naam niet kent, kunt u pgrep
gebruiken in plaats van pidof
. Als voorbeeld, om te zoeken naar alle processen die “ngin” ergens in hun naam bevatten, voer je uit:
pgrep ngin
Dit zal processen matchen met de exacte naam van “nginx”, evenals elk ander proces dat aan dezelfde criteria voldoet. Voor ons systeem, merk op dat we alle PID ‘ s die toebehoorden aan “nginx” in de bovenstaande screenshot.
de opdrachten pidof
enpkill
geven u veel minder informatie. Zoals we in de volgende sectie zullen zien, zijn er omstandigheden waarin je een proces niet kunt doden. De uitvoer van top
en ps
bevat aanvullende informatie die u helpt te bepalen of u een proces echt kunt afbreken.
welke processen kunt u afsluiten?
nu we het proces gevonden hebben, is het tijd om het te stoppen. Echter, voordat we leren hoe dit te doen, zijn er een paar dingen die je moet weten.
als u een normale gebruiker bent, kunt u uw eigen processen doden, maar niet die van andere gebruikers. Zowel top
als ps
tonen de gebruiker waaronder een proces draait. In het geval van top
bevat de tweede kolom de gebruikersnaam. Met ps aux
bevat de eerste kolom de gebruikersnaam.
een root gebruiker kan echter alle processen afbreken. U kunt of sudo
toevoegen voordat een commando wordt uitgevoerd als root, of een root shell verkrijgen door su
te typen, en vervolgens het commando uit te voeren.
In Linux, wanneer een proces wordt uitgeschakeld, wordt een “terminating signal” aan het proces geleverd. Hoewel er veel verschillende soorten signalen zijn, hebben we meestal te maken met de “SIGTERM” en “SIGKILL” signalen. Ze hebben een numerieke waarde van respectievelijk 15 en 9. Standaard gebruiken alle process killing commando ‘s” SIGTERM”, waardoor het programma enige code kan draaien voordat het wordt afgesloten, waardoor het”gracieus” kan beëindigen. Als je het proces met geweld wilt beëindigen, kun je in plaats daarvan “SIGKILL” gebruiken.
De Linux kernel onderhoudt enige informatie met betrekking tot de status van een proces. Wanneer een proces wordt beëindigd, moet de kernel de informatie rondhouden, zodat het ouderproces kan achterhalen of het dochterproces in staat was om zijn taken te voltooien en of het op zichzelf is beëindigd, of dat het is gedood. Totdat de ouder dit heeft gedaan, zullen deze” zombie ” processen verschijnen in de lijst met processen. Je kunt zo ‘ n proces niet doden omdat het slechts een vermelding is in de lijst van alle processen, en het heeft geen echt proces dat ermee verbonden is.
wanneer een proces invoer/uitvoerbewerkingen uitvoert (zoals lezen van of schrijven naar schijven), wordt gezegd dat het zich in een staat van “uninterruptible sleep”bevindt. Je kunt een proces niet doden terwijl het in deze staat is.
u kunt zien of een proces in de “zombie”(Z) of “uninterruptible sleep”(D) staat door te kijken naar de 8e kolom van de top
ps
uitvoer.
een proces afbreken
Er zijn verschillende commando ‘ s die u kunt gebruiken om een proces te doden — kill
killall
pkill
en top
. We beginnen met de eenvoudigste: het killall
Commando.
Killing processen met het killall Commando
hetkillall
commando is een van de makkelijkste manieren om een proces te doden. Als je de exacte naam van een proces Weet, en je weet dat het niet draait als een andere gebruiker en het is niet in de Z of D Staten, dan kun je dit commando direct gebruiken; het is niet nodig om het proces handmatig te lokaliseren zoals we hierboven beschreven.
standaard, bijvoorbeeld, om een proces genaamd “firefox” te doden, voer je uit:
killall firefox
om het proces met SIGKILL te stoppen, voer je uit:
killall -9 firefox
u kunt ook -SIGKILL
gebruiken in plaats van -9
.
Als u processen interactief wilt afbreken, kunt u -i
als volgt gebruiken:
killall -i firefox
Als u een proces wilt afbreken dat als een andere gebruiker wordt uitgevoerd, kunt u sudo
:
sudo killall firefox
u kunt ook een proces dat al een bepaalde periode draait met de -o
en -y
uitschakelen. Dus, als je een proces wilt afbreken dat langer dan 30 minuten draait, gebruik dan:
killall -o 30m <process-name>
als je een proces wilt afbreken dat minder dan 30 minuten draait, gebruik dan:
killall -y 30m <process-name>
evenzo gebruik je de volgende afkortingen voor de respectieve tijdseenheden:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Net als pgrep
, maakt pkill
het mogelijk om processen te doden op basis van gedeeltelijke overeenkomsten. Bijvoorbeeld, als u alle processen die de naam apache
in de naam wilt stoppen, voert u:
pkill apache
Als u een SIGKILL wilt gebruiken in plaats van een SIGTERM, gebruikt u:
pkill -9 apache
opnieuw, u kunt ook in plaats van -9
.
Killing processen met het kill commando
het gebruik van het kill commando is eenvoudig. Als je eenmaal de PID van het proces hebt gevonden dat je wilt doden, kun je het beëindigen met het kill
Commando. Als je bijvoorbeeld een proces met een PID van 1234 wilt stoppen, gebruik dan het volgende commando:
kill 1234
zoals we eerder al zeiden, is de standaard het gebruik van een SIGTERM. Om een SIGKILL te gebruiken, Gebruik je -9
of -SIGKILL
zoals we eerder hebben gezien:
kill -9 1234
Killing processen met het bovenste Commando
Het is heel eenvoudig om processen te doden met behulp van top
Commando. Zoek eerst naar het proces dat je wilt doden en noteer de PID. Druk vervolgens op k
terwijl top draait (dit is hoofdlettergevoelig). Het zal je vragen om de PID in te voeren van het proces dat je wilt doden.
nadat u de PID invoert, drukt u op enter. Nu zal het vragen welk signaal je wilt gebruiken om het proces te stoppen. Als u SIGTERM(15) wilt gebruiken, druk dan gewoon op enter omdat dit het standaardsignaal is. Als je SIGKILL(9) wilt gebruiken, typ dan 9 en druk op enter.
Als u het proces-ID leeg laat en direct op enter drukt, wordt het bovenste proces in de lijst beëindigd. U kunt scrollen met behulp van de pijltjestoetsen, en verander het proces dat u wilt doden op deze manier.
conclusie
in dit bericht zagen we de verschillende manieren om processen in Linux te doden. Het leren van deze commando ‘ s is essentieel voor een goed systeembeheer en-beheer. Als je meer van die commando ‘ s wilt verkennen, kijk dan eens naar hun respectievelijke manpages.
Als u dit bericht leuk vindt, deel het dan 🙂