GNU/Linux >> Znalost Linux >  >> Linux

Jak zabít všechny procesy s daným částečným názvem?

Pokud potřebujete větší flexibilitu při výběru procesů, použijte

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

Můžete použít grep -e atd.


Zabijte všechny procesy odpovídající řetězci "myProcessName":

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

Zdroj:http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

Proč je „ps pipe kill“ z terminálu zlo:

Piping celých čísel, které jste seškrábali z ps -ef do kill -9 je špatný a měli byste se cítit špatně, dvojnásob, pokud jste root nebo uživatel se zvýšenými oprávněními, protože to nedává vašemu procesu šanci čistě ukončit připojení soketu, vyčistit dočasné soubory, informovat své děti, že odejde nebo resetuje vlastnosti terminálu.

Místo toho pošlete 15 a počkejte sekundu nebo dvě, a pokud to nebude fungovat, pošlete 2, a pokud to nebude fungovat, pošlete 1. Pokud ne, ODSTRANĚTE BINÁR, protože se program chová špatně.

Obecnou zásadou je, že k stříhání živých plotů nepoužíváme Unix Railgun. https://porkmail.org/era/unix/award.html#kill

Vysvětlení výše uvedeného příkazu:

ps -ef vytvoří seznam ID procesů v počítači viditelných pro tohoto uživatele. Roura grep to filtruje dolů pro řádky obsahující tento řetězec. grep -v grep říká, že se neshodují na samotném procesu, který provádí grepping. Tisk roura awk říká, že rozdělíte řádky na mezeru výchozího oddělovače a přefiltrujete do druhého sloupce, což je naše ID procesu. Potrubní xargs spustí nový proces k odeslání všech těchto pid na kill -9 , čímž je všechny ukončíte.

Proč ps pipe kill je špatný, nebezpečný, ošklivý a hackerský:

  1. Existuje malá možnost, že omylem ukončíte operační systém nebo způsobíte nedefinované chování v nesouvisejícím procesu, což povede k nestabilitě celého systému, protože ps -ef uvádí tisíce procesů a nemůžete si být jisti, že nějaký proces třetí strany sdílí váš název procesu, nebo že v době mezi čtením a spuštěním kill -9 se procesní ID změnilo na něco jiného a teď jste ukončili nějaké náhodné nezbytný proces nesouvisející s vaším.

  2. Pokud kód, který je nuceně ukončen, provádí jakékoli operace databáze nebo zabezpečené transakce s nízkou pravděpodobností závodů, v určitém zlomku procenta času bude atomicita této transakce zničena, což způsobí nedefinované chování. kill -9 nebere žádné zajatce. Pokud je váš kód na toto citlivý, zkuste nahradit xargs kill část s přeneseným příznakem, který požaduje řádné vypnutí, a pouze v případě, že je tento požadavek zamítnut, jako poslední možnost kill -9

Ale, pokud rozumíte všem rizikům a ovládání pro ně pomocí jedinečných jmen a jste v pořádku s několika vyřazenými transakcemi nebo občasnou korupcí, pak budete v 99,9 % případů v pořádku. Pokud se vyskytne problém, restartujte počítač a ujistěte se, že nedochází ke kolizi procesů. Je to kvůli kódu, jako je tento, který dělá ze skriptu technické podpory:„Zkoušel jsi restartovat počítač“ mem 5. úrovně. "Potutelný robot seškrábal ps." najít celá čísla a odeslat je na kill -9 , takže k odstranění problému restartujte počítač.

Proč nepoužít pouze pkill co je jednodušší?

Výše uvedené mi umožňuje ruční ovládání, protože ps , grep , awk , kill a xargs jsou multiplatformním standardem. Poskytuje plnou kontrolu, který motor regulárních výrazů se má použít, která část názvu procesu se má shodovat, zpracovává rozlišování velkých a malých písmen a správu výjimek.

pkill -f -e -c myProcessName

Dělá mi to samé, ale viz man pkill má různé chování, příznaky a regex motory mezi variantami Linuxu, Macu, Zune-Bash a mého opensource routeru. Takže ano, dejte svou 35000 Watt Unix-Railgun do schopných rukou pkill, aby ostříhal živé ploty. Podívejte se, co se stane.


Použijte pkill -f , který odpovídá vzoru pro kteroukoli část příkazového řádku

pkill -f my_pattern

Pro případ, že by to nefungovalo, zkuste použít také tento:

pkill -9 -f my_pattern

Linux
  1. Jak najít všechny podřízené procesy?

  2. Jak zabít podřízený proces po daném časovém limitu v Bash?

  3. Jak mohu zabít všechny procesy uživatele pomocí jejich UID

  1. Jak zabít proces zombie na Linuxu

  2. Co jsou zombie procesy a jak najít a zabít zombie procesy?

  3. Jak zabít <zaniklý> proces s rodičem 1

  1. Jak zabít proces s frází v jeho názvu?

  2. Jak mohu zabít proces podle jména místo PID?

  3. Jak zabít všechny procesy na pozadí v zsh?