GNU/Linux >> Znalost Linux >  >> Linux

Správa procesů na Linuxu pomocí kill and killall

V Linuxu je každý program a démon „proces“. Většina procesů představuje jeden běžící program. Jiné programy mohou oddělit další procesy, jako jsou procesy, které naslouchají určitým věcem, které se dějí, a pak na ně reagují. A každý proces vyžaduje určité množství paměti a výpočetního výkonu. Čím více procesů máte spuštěných, tím více paměti a cyklů CPU budete potřebovat. Na starších systémech, jako je můj sedm let starý notebook, nebo na menších počítačích, jako je Raspberry Pi, můžete ze svého systému vytěžit maximum, pokud budete sledovat, jaké procesy běží na pozadí.

Seznam běžících procesů můžete získat pomocí ps příkaz. Obvykle budete chtít dát ps některé možnosti pro zobrazení více informací ve výstupu. Rád používám -e možnost vidět všechny procesy běžící v mém systému a -f možnost získat úplné podrobnosti o každém procesu. Zde je několik příkladů:

$ ps
    PID TTY          TIME CMD
  88000 pts/0    00:00:00 bash
  88052 pts/0    00:00:00 ps
  88053 pts/0    00:00:00 head
$ ps -e | head
    PID TTY          TIME CMD
      1 ?        00:00:50 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      6 ?        00:00:02 kworker/0:0H-events_highpri
      9 ?        00:00:00 mm_percpu_wq
     10 ?        00:00:01 ksoftirqd/0
     11 ?        00:00:12 rcu_sched
     12 ?        00:00:00 migration/0
$ ps -ef | head
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 13:51 ?        00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root           2       0  0 13:51 ?        00:00:00 [kthreadd]
root           3       2  0 13:51 ?        00:00:00 [rcu_gp]
root           4       2  0 13:51 ?        00:00:00 [rcu_par_gp]
root           6       2  0 13:51 ?        00:00:02 [kworker/0:0H-kblockd]
root           9       2  0 13:51 ?        00:00:00 [mm_percpu_wq]
root          10       2  0 13:51 ?        00:00:01 [ksoftirqd/0]
root          11       2  0 13:51 ?        00:00:12 [rcu_sched]
root          12       2  0 13:51 ?        00:00:00 [migration/0]

Poslední příklad ukazuje nejvíce podrobností. Na každém řádku UID (ID uživatele) ukazuje uživatele, který proces vlastní. PID (ID procesu) představuje číselné ID každého procesu a PPID (ID nadřazeného procesu) zobrazuje ID procesu, který tento proces vytvořil. V jakémkoli unixovém systému se procesy počítají od PID 1, což je první proces, který se spustí po spuštění jádra. Zde systemd je první proces, který zplodil kthreadd . A kthreadd vytvořil další procesy včetně rcu_gp , rcu_par_gp a spoustu dalších.

Správa procesů pomocí příkazu kill

Systém se o většinu procesů na pozadí postará sám, takže se o ně nemusíte starat. Měli byste se zapojit pouze do správy jakýchkoli procesů, které vytvoříte, obvykle spouštěním aplikací. Zatímco mnoho aplikací spouští jeden proces najednou (přemýšlejte o hudebním přehrávači, emulátoru terminálu nebo hře), jiné aplikace mohou vytvářet procesy na pozadí. Některé z nich mohou zůstat spuštěné i po ukončení aplikace, aby se mohly rychle vrátit do práce při příštím spuštění aplikace.

Správa procesů je problém, když spouštím Chromium, open source základnu pro prohlížeč Chrome od Google. Chromium pracuje na mém notebooku docela tvrdě a spouští spoustu dalších procesů. Právě teď vidím spuštěné tyto procesy Chromium s pouze pěti otevřenými kartami:

$ ps -ef | fgrep chromium
jhall      66221   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      66230   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall      66861   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      67329   65132  0 15:45 pts/0    00:00:00 grep -F chromium

Některé řádky jsem vynechal, ale existuje 20 procesů Chromium a jeden grep proces, který hledá řetězec "chromium."

$ ps -ef | fgrep chromium | wc -l
21

Ale poté, co Chromium ukončím, tyto procesy zůstanou otevřené. Jak je vypnete a získáte zpět paměť a CPU, které tyto procesy zabírají?

zabití příkaz umožňuje ukončit proces. V nejjednodušším případě řeknete zabít PID toho, co chcete zastavit. Například k ukončení každého z těchto procesů bych musel provést kill příkaz proti každému z 20 ID procesů Chromium. Jedním ze způsobů, jak toho dosáhnout, je příkazový řádek, který získá PID Chromium, a druhý, který spustí kill proti tomuto seznamu:

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $( cat /tmp/pids)

Ty poslední dva řádky jsou klíčové. První příkazový řádek vygeneruje seznam ID procesů pro prohlížeč Chromium. Druhý příkazový řádek spustí kill příkaz proti tomuto seznamu ID procesů.

Představujeme příkaz killall

Jednodušší způsob, jak zastavit spoustu procesů najednou, je použít killall příkaz. Jak už podle názvu asi tušíte, zabít ukončí všechny procesy, které odpovídají názvu. To znamená, že můžeme tento příkaz použít k zastavení všech našich nečestných procesů Chromium. Je to stejně jednoduché jako:

$ killall /usr/lib64/chromium-browser/chromium-browser

Buďte ale opatrní s killallem . Tento příkaz může ukončit jakýkoli proces, který odpovídá tomu, co mu zadáte. Proto rád nejprve používám ps -ef pro kontrolu běžících procesů a poté spusťte killall proti přesné cestě k příkazu, který chci zastavit.

Můžete také použít -i nebo --interactive možnost zeptat se killall vás upozorní, než každý proces zastaví.

zabít podporuje také možnosti výběru procesů, které jsou starší než určitý čas pomocí -o nebo --starší-než volba. To může být užitečné, pokud například objevíte sadu nepoctivých procesů, které běží bez dozoru několik dní. Nebo můžete vybrat procesy, které jsou mladší než konkrétní čas, jako jsou například uběhnuté procesy, které jste nedávno spustili. Použijte -y nebo --mladší-než možnost vybrat tyto procesy.

Další způsoby řízení procesů

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Řízení procesů může být důležitou součástí údržby systému. V mé rané kariéře správce systémů Unix a Linux byla schopnost zabíjet uniklé úlohy užitečným nástrojem k udržení správného chodu systémů. Možná nebudete muset zabíjet nečestné procesy v moderním linuxovém desktopu, ale vědět zabíjet a zabít vám může pomoci, když se věci nakonec zvrtnou.

Můžete také hledat jiné způsoby řízení procesů. V mém případě jsem opravdu nepotřeboval použít kill nebo zabít zastavit procesy Chromium na pozadí poté, co jsem opustil prohlížeč. V prohlížeči Chromium je k dispozici jednoduché nastavení:

Přesto je vždy dobré sledovat, jaké procesy ve vašem systému běží, a vědět, jak je v případě potřeby spravovat.


Linux
  1. Správa procesů v Ubuntu Linux

  2. Linux:Najděte a zabijte zombie procesy

  3. Najděte (a zabijte) staré procesy

  1. Správa připojeného hardwaru v systému Linux pomocí systemd-udevd

  2. Vytváření a správa oddílů v Linuxu s parted

  3. Jak zabít běžící procesy v Linuxu

  1. Upravujte text v Linuxu pomocí KWrite a Kate

  2. Přizpůsobení mého linuxového terminálu pomocí tmux a Git

  3. Nejlepší způsob, jak zabít procesy Zombie a D state v linuxu