Abychom pochopili problém, proč Ctrl + C nefunguje, je velmi užitečné pochopit, co se stane, když jej stisknete:
Většina shellů váže Ctrl + C k "odeslání signálu SIGINT do programu, který aktuálně běží v popředí". Můžete si přečíst o různých signálech přes man signál:
SIGINT 2 Term Interrupt from keyboard
Programy mohou tento signál ignorovat, stejně jako mohou ignorovat SIGTSTP:
SIGTSTP 18,20,24 Stop Stop typed at tty
(Což dělá většina shellů, když stisknete Ctrl + Z , a proto není zaručeno, že bude fungovat.)
Existují některé signály, které proces nemůže ignorovat:SIGKILL, SIGSTOP a některé další. Tyto signály můžete odeslat pomocí příkazu kill. Chcete-li tedy zabít proces zavěšení / zombie, stačí najít ID procesu (PID). Použijte například pgrep
nebo ps
a poté kill
to:
% kill -9 PID
Pokud Ctrl +C (SIGINT) nefunguje, zkuste Ctrl +\ (SIGQUIT). Pak zkuste Ctrl +Z (SIGTSTP). Pokud vás to vrátí do příkazového řádku, proveďte kill
na ID procesu. (Toto je výchozí signál SIGTERM, který můžete zadat pomocí kill -TERM
. V některých shellech možná budete moci použít %1
odkazovat na PID.) Pokud to nefunguje, přejděte na jiný terminál nebo relaci SSH a proveďte kill
nebo kill -TERM
na ID procesu. Pouze jako poslední možnost měli byste udělat kill -KILL
, aka kill -9
, protože nedává procesu žádnou šanci na čisté přerušení, synchronizaci otevřených souborů, odstranění dočasných souborů, uzavření síťových připojení atd.
Podívejte se také na tento odkaz.
Ctrl +Z :pozastavení procesu.
Ctrl +C :zdvořile požádejte proces, aby se nyní vypnul.
Ctrl +\ :nemilosrdně zabijte proces, který je aktuálně v popředí