Vraag Wat is het verschil tussen Ctrl-z en Ctrl-c in de terminal?


Kan iemand me het verschil vertellen tussen ctrl+z en ctrl+c?

Wanneer ik in de terminal ben, stoppen beide combinaties het huidige proces, maar wat is precies het verschil tussen beide?


96
2017-08-13 13:50


oorsprong


Ik heb hier een zeer vergelijkbare vraag gesteld: unix.stackexchange.com/questions/116959/... - ThorSummoner
Een nog nauwere overeenkomst: Wat is het verschil tussen Ctrl + Z en Ctrl + C in de Unix-opdrachtregel? op Super gebruiker. - Scott
ja ik was succesvol in het begrijpen van het verschil tussen beide !! - chaitanya lakkundi
Eén ding wil ik hieraan toevoegen, dat de meeste jongens (ook in mijn professionele omgeving) geen onderscheid maken tussen hen. En gebruikte de CTRL-Z optie om de opdracht te beëindigen. Dat is een verkeerde oefening. U moet in al deze gevallen CTRL-C gebruiken. Zoals CTRL-Z eenvoudig op de achtergrond wordt gezet. Het proces wordt dus niet beëindigd totdat het is voltooid, wat misschien niet de wens van de gebruiker (meestal) is wanneer hij op CTRL-Z drukt om te beëindigen. - kuldeep.kamboj


antwoorden:


Als we randgevallen opzij leggen, is het verschil eenvoudig. Controle+C breekt de applicatie bijna onmiddellijk af terwijl Controle+Z shunt het op de achtergrond, opgeschort.

De shell stuurt verschillende signalen naar de onderliggende applicaties op deze combinaties:

  • Controle+C (besturingsteken intr) verzendt SIGINT waardoor de toepassing wordt onderbroken. Meestal zorgt het voor afbreken, maar dit is aan de applicatie om te beslissen.

  • Controle+Z (besturingsteken susp) verzendt SIGTSTP naar een voorgrondtoepassing, waardoor het op de achtergrond wordt geplaatst, opgeschort. Dit is handig als u wilt breken met iets als een editor om bepaalde gegevens te verzamelen die u nodig hebt. U kunt teruggaan naar de toepassing door hard te lopen fg (of %x waar x is het taaknummer zoals weergegeven in jobs).

    We kunnen dit testen door te hardlopen nano TESTen druk vervolgens op Controle+Z en dan rennen ps aux | grep TEST. Dit zal ons het nano proces loopt nog steeds:

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

    Verder kunnen we zien (van die T, die zich in de statuskolom bevindt) dat het proces is gestopt. Dus het leeft nog, maar het loopt niet ... Het kan worden hervat.

    Sommige applicaties zullen crashen als ze lopende externe processen hebben (zoals een webverzoek) die mogelijk een time-out hebben terwijl ze slapen.


131
2017-08-13 13:56



Het is de moeite waard eraan toe te voegen dat het ook mogelijk is om te draaien bg (in plaats van fg) om een ​​toepassing die Ctrl + Z'ed is, opnieuw te schorten zonder zet het terug op de voorgrond; waardoor je effectief controle hebt over zowel de shell die de applicatie startte en de applicatie zelf, alsof je hem had gebruikt & bij het starten van de applicatie. Dit komt vaak van pas als je bent vergeten ermee te beginnen & :) - Malte Skoruppa
En je kunt teruggaan naar dat proces door te typen fg nog een keer! - sleblanc
In het geval dat er verschillende taken zijn opgeschort of op de achtergrond: "jobs" vermelden ze en "fg% n" of "bg% n" of zelfs "kill% n" om job% n in voorgrond of achtergrond te plaatsen of te doden . - Olivier Dulac
@ Oli: Uw tweede alinea zegt: "De shell send [s] ... geeft signalen door aan de onderliggende applicaties ..." Nee, het besturingssysteem / terminalstuurprogramma stuurt de signalen. (In een venstersysteem kan de vensterbeheerder een rol spelen.) Om compleet te zijn (hoewel buiten de reikwijdte van de oorspronkelijke vraag), zou u Ctrl + \ kunnen noemen. - Scott
Hoe weet de sessie welke procesgroep naar de voorgrond moet terugkeren na het doen van een van beide ctrl c of ctrl z ? Het standaard op de SID (bash)? - jiggunjer


Controle+Z schort een proces op (SIGTSTP) en Controle+C onderbreekt een proces (SIGINT)

http://en.wikipedia.org/wiki/Control-Z 

Op Unix-achtige systemen is Control + Z de meest gebruikelijke standaardtoetsenbordtoewijzing voor de sleutelreeks die een proces opschort

http://en.wikipedia.org/wiki/Control-C

In POSIX-systemen zorgt de reeks ervoor dat het actieve programma een SIGINT-signaal ontvangt. Als het programma niet opgeeft hoe u met deze voorwaarde moet omgaan, wordt het beëindigd. Doorgaans wordt een programma dat wel met een SIGINT werkt nog steeds beëindigd, of ten minste beëindigd, de taak die erin wordt uitgevoerd


14
2017-08-13 13:56



Goede job posting referenties. Maar in het algemeen gesproken is Wikipedia geen erg goede bron voor technische verwijzingen. - Aaron
@ BryceAtNetwork23 dat is heel waar; Ik voelde dat de Wikipedia-definitie in dit geval voldoende was. Ik zal echter in de toekomst op zoek naar meer technische referenties! - Sleep Deprived Bulbasaur


Ctrl+C wordt gebruikt om een ​​proces met signaal te doden SIGINT met andere woorden, het is beleefd doden .

Ctrl+Z  wordt gebruikt om een ​​proces op te schorten door het het signaal te sturen SIGSTOP , dat is als een slaapsignaal, dat ongedaan kan worden gemaakt en het proces weer kan worden hervat.

Wanneer een proces echter is opgeschort, kunnen we het weer hervatten fg (resume in forground) en bg (resume in background) , maar ik kan een gedood proces niet hervatten, dat is een verschil tussen het gebruik Ctrl+C & Ctrl+Z.

Hoe uitzicht opgeschort proces?

Door het commando Jobs te gebruiken, zal de uitvoer zijn:

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

Hoe doden een opgeschort proces op de achtergrond?

Door het gebruiken van doden opdracht:

dood% n waar n worden getallen weergegeven in opdracht voor opdrachten, dus ik wil kat doden: kill %1 .


10
2017-08-14 07:49



in overeenstemming met andere opmerkingen in deze thread, correctie: ctrl-z stuurt een SIGTSTP-signaal niet een SIGSTOP. - lukewendling
Dood% 1 zegt me - Bewerking niet toegestaan. Waarom? Bedankt - Satya Prakash


Deze zou moeten helpen

Ctrl+Z wordt gebruikt om een ​​proces op te schorten door het het signaal SIGSTOP te sturen, dat niet door het programma kan worden onderschept. Terwijl Ctrl+C wordt gebruikt om een ​​proces te doden met het signaal SIGINT en kan worden onderschept door een programma, zodat het zichzelf kan opschonen voordat het wordt afgesloten of helemaal niet wordt afgesloten.


6
2017-08-13 13:58



Dit is niet helemaal correct. Het stuurt SIGTSTP, die kan worden gevangen door het programma. Er zijn vier verschillende signalen die een programma kunnen onderbreken SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU. Van die alleen SIGSTOP kan niet worden geblokkeerd. De andere drie worden door de terminal gebruikt om het proces onder verschillende omstandigheden te stoppen. - kasperd


wanneer u op drukt ctrl+c, dit betekent dat u SIGINT naar uw proces stuurt. alsof je deze opdracht typt: kill -SIGINT <your_pid>. Het zal je jouw proces doden. Dat waarom je het niet kunt zien als het probleem zich voordoet ps opdracht.
Wanneer u op drukt ctrl+z, dit betekent dat je SIGSTOP naar je proces stuurt. alsof je deze opdracht typt: kill -SIGKSTOP <your_pid>. Het stopt je proces, maar het proces is nog steeds in leven. U kunt uw proces dus opnieuw activeren door SIGCONT naar uw proces te sturen.


3
2017-08-14 07:24





Simpel gezegd:

  • CTRL-C verzoekt het programma afbreken.

  • CTRL-Z dwingt het programma om opschorten en naar de achtergrond gaan.

    Hiermee kunt u het later hervatten met de opdracht fg. Resterende achtergrondtaken worden gedood als u de login-shell afsluit.


3
2017-08-15 00:39