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ý:
-
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. -
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žnostkill -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