Jaký je rozdíl mezi Ctrl-z a Ctrl-c v terminálu?

97

Může mi někdo říct rozdíl mezi ctrl + z a ctrl + c ?

Když jsem v terminálu, obě kombinace zastaví aktuální proces, ale co přesně je rozdíl mezi oběma?

    
dané chaitanya lakkundi 13.08.2014 15:50

6 odpovědí

131

Pokud necháme hranové případy na jedné straně, je rozdíl jednoduchý. Ovládání + C přeruší aplikaci téměř okamžitě, zatímco Control + Z p>

Skořepina vysílá různé signály do základních aplikací v těchto kombinacích:

  • Ovládací prvek + C (řídicí znakintr) odešle SIGINT, který přeruší aplikaci. Obvykle způsobuje, že se přeruší, ale závisí to na rozhodování.

  • Ovládací prvek + Z (řídicí znaksusp) odešle SIGTSTP do aplikace v popředí, To je užitečné, pokud potřebujete vyjít z nějakého editoru, abyste jeli a chytili nějaké údaje, které potřebujete. Můžete se vrátit do aplikace spuštěnímfg (nebo%x, kdex je číslo úlohy, jak je uvedeno vjobs).

    Můžeme otestovat spuštěnímnano TEST, pak stiskem Control + Z a spuštěnímps aux | grep TEST. To nám ukáže, že procesnano stále běží:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    Dále můžeme vidět (z toho T, který je ve sloupci stavu), že byl proces zastaven . Takže je stále naživu, ale neběží ... Může být obnoveno.

    Některé aplikace se zhroutí, pokud mají probíhající externí procesy (například webovou žádost), které by mohly uplynout, když spí.

odpověděl Oli 13.08.2014 15:56
14

Ovládání + Z pozastaví proces (SIGTSTP) a Control + C SIGINT)

Odkaz

  

V systémech typu Unix je Control + Z nejběžnější standardní mapování klávesnice pro sekvenci klíčů, které pozastaví proces

Odkaz

  

V POSIX systémech způsobuje sekvence, že aktivní program přijímá signál SIGINT. Pokud program neurčuje, jak tuto situaci zvládnout, ukončí se. Program, který zpracovává SIGINT, se obvykle ukončí, nebo alespoň ukončí úlohu, která běží uvnitř.

    
odpověděl Sleep Deprived Bulbasaur 13.08.2014 15:56
10

Ctrl + C slouží k zablokování procesu se signálemSIGINT, jinými slovy je zdvořilý kill p>

Ctrl + Z slouží k pozastavení procesu zasláním signálu SIGSTOP , který je jako signál spánku zrušeno a proces může být obnoven znovu.

Pokud je však proces pozastaven, můžeme jej opět obnovit ofg (resume in forground) abg (resume in background), ale pokračuji v procesu zabití, což je rozdíl mezi použitím Ctrl + C & Ctrl + Z .

Jak zobrazit pozastavený proces?

Použitím příkazu úlohy bude výstup:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Jak zabít pozastavený proces na pozadí?

Pomocí příkazu kill :

zabít% n , kde budou čísla n zobrazena v příkazu úlohy, takže chci zabít cat:kill %1.

    
odpověděl nux 14.08.2014 09:49
6

Tento by měl pomoci p>

  

Ctrl + Z se používá k pozastavení procesu odesláním signálu SIGSTOP, který program nemůže zachytit. Zatímco Ctrl + C se používá k zabití procesu se signálem SIGINT a může být zachycen programem, aby mohl před ukončením ukončit nebo ukončit vše.

    
odpověděl Graham 13.08.2014 15:58
3

, když stisknete tlačítko ctrl + c , znamená to, že jste do procesu odeslali SIGINT. jako byste zadali tento příkaz:kill -SIGINT <your_pid>. Zabije vás váš proces. To je důvod, proč jej nemůžete vidět při příkazu ps Když stisknete ctrl + z , znamená to, že pošlete SIGSTOP do vašeho procesu. jako byste zadali tento příkaz:kill -SIGKSTOP <your_pid>. Zastaví váš proces, ale proces je stále naživu. Takže můžete svůj proces znovu aktivovat zasláním SIGCONT do vašeho procesu.

    
odpověděl P_O_I_S_O_N 14.08.2014 09:24
3

Jednoduše řečeno:

  • CTRL - C požaduje, aby program zrušil . >

  • CTRL - Z vynutí program pozastavit a přejít do pozadí .

    To vám umožní později pokračovat příkazemfg. Zbývající úkoly na pozadí jsou zabity při ukončení přihlašovacího shellu.

odpověděl thomasrutter 15.08.2014 02:39