Pokud v Linuxu potřebujete zabít proces (z jakéhokoli důvodu) prostřednictvím příkazového řádku, můžete použít příkaz kill, který vyžaduje, abyste jako vstup předali ID procesu, který se pokoušíte ukončit. Věděli jste ale, že existuje také způsob, jak zabít procesy bez zadání jejich PID?
Ano, existuje nástroj – nazvaný pkill - to vám umožní. V tomto článku probereme základy tohoto příkazu pomocí několika snadno srozumitelných příkladů. Ale než to uděláme, stojí za zmínku, že všechny příklady zde byly testovány na počítači Ubuntu 18.04 LTS a Debian 10.
Příkaz pkill pro Linux
Příkaz pkill v Linuxu je v podstatě jednodušší způsob, jak zabít procesy. Následuje jeho syntaxe:
pkill [options] pattern
A zde je to, co o tomto nástroji říká manuálová stránka:
pkill - signal processes based on name and other attributes
Následuje několik příkladů ve stylu otázek a odpovědí, které by vám měly poskytnout lepší představu o tom, jak příkaz pkill funguje.
O1. Jak používat příkaz pkill?
Základní použití je docela přímočaré – vše, co musíte udělat, je spustit „pkill“ s názvem procesu jako vstupem.
Pokud se například pokoušíte zabít proces 'gedit', můžete to udělat pomocí pkill následujícím způsobem:
pkill gedit
A je to. Uvidíte, že proces gedit (pokud běží) bude po provedení výše uvedeného příkazu zabit.
Q2. Jak přimět pkill vysílat jiný signál?
Jak již bylo zmíněno na začátku tohoto článku, příkaz pkill v podstatě vysílá signál procesu. Ve výchozím nastavení se odesílá signál SIGTERM, ale pokud chcete, můžete signál změnit pomocí možnosti příkazového řádku --signal.
Například:
pkill --signal SIGKILL
gedit
Q3. Jak zabíjet procesy založené na úplném příkazovém řádku?
Ve výchozím nastavení se název vstupu (vzor) shoduje s názvem procesu. Pokud však chcete, můžete místo toho nastavit pkill tak, aby odpovídal úplnému příkazovému řádku. To lze provést pomocí volby příkazového řádku -f.
Řekněme například, že v mém systému běží dva příkazy ping. Následuje výňatek z výstupu příkazu ps:
...
root 19253 0.0 0.1 9180 2916 pts/1 S+ 19:24 0:00 ping google.com
root 19331 0.0 0.1 9180 2912 pts/2 S+ 19:25 0:00 ping howtoforge.com
...
Nyní předpokládejme, že požadavkem je pouze zabít příkaz 'ping google.com' pomocí pkill.
Pokud používáte pkill následujícím způsobem:
pkill ping
pak budou oba příkazy zabity. Abychom tomu zabránili, můžeme použít volbu -f příkazového řádku. Zde je návod, jak jej lze použít:
pkill -f "ping google.com"
Provedl jsem příkaz v prvním okně terminálu:
Výsledek v druhém okně terminálu, kde probíhal proces ping:
Takže když byl proveden výše uvedený příkaz, byl zabit pouze příkaz uvedený jako vstup.
4. Jak učinit pkill case insensitive?
Ve výchozím nastavení příkaz pkill rozlišuje velká a malá písmena, což znamená, že zachází se jmény s velkými a malými písmeny odlišně. Pokud však chcete, můžete přinutit pkill, aby nerozlišoval malá a velká písmena, což můžete udělat pomocí volby příkazového řádku -i.
pkill -i [process-name]
O5. Jak přimět syslog znovu přečíst svůj konfigurační soubor pomocí pkill?
K dosažení tohoto cíle můžete použít příkaz pkill následujícím způsobem:
pkill -HUP syslogd
Závěr
Takže pkill je extrémně užitečný příkaz, pokud jde o zabíjení procesů. Již jsme diskutovali o některých možnostech příkazového řádku, které tento příkaz poskytuje. Jakmile je dokončíte, můžete se o příkazu dozvědět více na jeho manuálové stránce.