2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

Wat is er anders tussen Ctrl+Z en Ctrl+C in de Unix-opdrachtregel?

Ik gebruik Mac OS X Terminal. En ik gebruik Ctrl+Z of Ctrl+C om sommige programma’s te stoppen. Maar ik realiseerde me dat ik niet weet wat ze precies doen. Wat zijn ze en wat is het verschil?

Deze vraag was een * Super User Question of the Week . Lees het blogbericht van 13 maart 2011 * * blogbericht voor meer details of * dien uw eigen ** vraag van de Week in.

Antwoorden (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z wordt gebruikt voor het opschorten van een proces door het sturen van het signaal SIGSTOP, dat niet door het programma kan worden onderschept. Terwijl Control+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 verlaten, of helemaal niet wordt verlaten.

Als je een proces opschort, zal dit in de shell verschijnen om je te vertellen dat het is opgeschort:

[1]+ Stopped yes

Echter, als je een proces doodt, zul je geen enkele bevestiging zien anders dan dat het terug wordt gezet naar een shell prompt. Wanneer je een proces opschort, kun je er ook mooie dingen mee doen. Bijvoorbeeld, het uitvoeren van dit:

fg

Met een programma geschorst zal het terug naar de voorgrond brengen.

En het uitvoeren van het commando

bg

Met een programma geschorst zal het op de achtergrond kunnen draaien (de uitvoer van het programma zal echter nog steeds naar de TTY gaan).

Als je een geschorst programma wilt uitschakelen, hoef je het niet eerst met fg terug te brengen, je kunt gewoon het commando doen:

kill %1

Als je meerdere geschorste commando’s hebt, zal het draaien van

jobs

ze op een rijtje zetten, zoals dit:

[1]- Stopped pianobar
[2]+ Stopped yes

Met behulp van %#, waarbij # het opdrachtnummer is (degene tussen vierkante haakjes van de jobs uitgang) met bg, fg, of kill, kan de actie op die opdracht worden uitgevoerd.

22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z schort het proces op met SIGTSTP, u kunt het later hervatten. Ctrl+C doodt het proces met SIGINT, waardoor het proces wordt beëindigd, tenzij het door het doelwit wordt behandeld/ondertekend, zodat u het niet kunt hervatten. Er is ook een SIGSTOP die verstuurd kan worden door kill() en die het proces niet kan onderscheppen. SIGCONT is de tegenhanger van zowel SIGSTOP als SIGTSTP die het proces niet onderbreekt.

18
18
18
2011-03-27 11:52:36 +0000

CTRL+Z stopt (pauzeert) een opdracht

CTRL+C beëindigt een opdracht

met CTRL+C kunt u het proces niet hervatten, maar met CTRL+Z kan de opdracht worden hervat door gewoon in te voeren bij het commando promt:

fg %1

indien u meerdere processen heeft gepauzeerd dan moet u

jobs

doen om de uitvoer te zien en het juiste nummer te selecteren om e te hervatten. g.

fg %3

hervat de derde opdracht in de lijst. Je kunt ook opdrachten op de achtergrond laten lopen met

bg %n

waarbij n het opdrachtnummer is.

3
3
3
2014-07-03 15:57:10 +0000

CTRL+Z stopt (pauzeert) een opdracht

CTRL+C beëindigt een opdracht

Met CTRL+C kan het proces niet hervat worden, maar met CTRL+Z kan de opdracht hervat worden door gewoon op de commando prompt in te voeren:

fg %1

Indien u meerdere processen heeft gepauzeerd dan moet u

opdrachten

doen om de uitvoer te zien.

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.
Cntrl + C simply terminates the running process.

Gebruik makend van Cntrl + C kunt u het proces niet hervatten. waar als u Cntrl + Z gebruikt kunt u het proces hervatten.

gebruiken fg %1 om het proces te hervatten.

2
2
2
2013-02-26 17:19:22 +0000

De vorige antwoorden zijn correct, maar om een onbekende reden schort Ctrl-Z ook alle kinderprocessen op, maar killall -SIGSTOP … schort alleen het voorste (ouder)proces op en laat de kinderen rennen zoals ze willen.