Vraag Wat te doen als Ctrl-C de lopende taak niet vernietigt?


Soms negeren processen het verzonden SIGINT-signaal Ctrl-C in Bash. Bijvoorbeeld, man en vi. Ervan uitgaande dat u niet wilt googlen of de handleiding lezen over hoe u het lopende proces afsluit, is er een sleutelreeks die dat wel zal doen altijd werken (zonder de terminal te verlaten)?


91
2017-11-20 11:47


oorsprong




antwoorden:


Zend de SIGQUIT signaleren met Ctrl+\.

.. $ sleep 10
^\Quit

→ Dit komt overeen met kill -3 pid. Programma's die in de user-space worden uitgevoerd, negeren sigquit niet.

Er is ook een set van Magic SysRq Toetsenbord sneltoetsen. Een van de interessantere is dit: alt+SysRq+k. Het doodt elk proces op de huidige virtuele console. Als een van je tty's volledig en volledig is verbroken, kan dit worden gebruikt om ga terug. Op de tty waarop X.org wordt uitgevoerd, kan het worden gebruikt om X zonder genade te doden.

De SysRq-sleutel is op de meeste toetsenborden hetzelfde als de afdruksleutel. Op mijn notebook kan het worden opgeroepen met de Fn-toets; D.w.z. Alt → Fn → Afdrukken → k in die volgorde.

Hier zijn enkele van de belangrijkste snelkoppelingen voor procesbeheer:

  • Ctrl+Z: pauzeer a proces (plus bg om op de achtergrond te hervatten, fg naar de voorgrond halen)
  • Ctrl+C: beleefd het proces vragen aan nu afsluiten
  • Ctrl+\: genadeloos het proces dat is doden momenteel op de voorgrond
  • alt+SysRq+s: Schrijf gegevens naar schijf (doe dit altijd voordat je iets belangrijks doodt)
  • alt+SysRq+s, k: genadeloos alle stroom doden processen op een bepaalde virtuele console
  • alt+SysRq+s, b: genadeloos rebooten zonder demontage,
  • alt+SysRq+r, e, ik, s, u, b: Veilig reboot even ikf de systeem is utterly broken,

Notitie: Ctrl+Z, in contrast met Ctrl+C en Ctrl+\, werkt ook voor man, vi, less, en dergelijke.

Bij twijfel zal de volgende procedure bijna altijd werken:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z geeft dat natuurlijk aan Ctrl+Z is ingedrukt.


Voor een meer diepgaande blik op Shells en Terminals, zie ook mijn antwoorden op:


124
2017-11-20 12:07



Werkt voor "slaap 10" maar werkt nog steeds niet voor "man" of "vi". Het is duidelijk dat "kill -9 pid" werkt bij het doden van beide processen. Mis ik iets? - Olivier Lalonde
Ctrl + Z werkt met dingen als minder, man, vi enzovoort. Je kunt ze dan doden door a te doen ps om hun proces-id te zien en ze te doden met behulp van kill pid of, als je niet om andere instanties van het programma geeft, killall vi. In elk geval lijkt Ctrl-Z altijd te werken. - Stefano Palazzo♦
Je kunt ook doen kill %% om de laatste klus te klaren en kill %5 waarbij 5 het jobnummer is getoond in jobs. - Olivier Lalonde
Ctrl- \ verzendt een SIGQUIT, geen SIGKILL. Er zijn enkele belangrijke verschillen tussen SIGQUIT en SIGKILL. en.wikipedia.org/wiki/SIGQUIT - Juliano
Er is geen beperking dat programma's die in gebruikersruimte worden uitgevoerd SIGQUIT moeten eren. C- \ "genadeloos doodt het proces dat zich op dit moment op de voorgrond bevindt" net zo min als C-c doet, beide zijn trappable. - Chris Down


Je kan het proberen Ctrl+\


11
2017-11-20 12:06



Werkt ook niet met beide man of vi. - Hippo
werkte ubuntu 16.04 - kRazzy R


Soms het CTRL + C wordt verzonden naar het verkeerde programma of invoerkanaal. Dit komt vooral veel voor bij editors zoals vi, met commando's met achtergrondmuziek, complexe bash-commando's met loops, enz.

Een eenvoudige, snelle oplossing is om de taak op te schorten CTRL + Z en dood het dan op jobnummer: kill %1 of kill -9 %1, enz.


8
2017-11-20 20:18





  • Probeer een van deze:

    Ctrl+4

    Ctrl+\


  • Of:

    Ctrl+Z en voer dan uit:

    kill %1

Waar %1 is het aantal taken dat werd geretourneerd toen u op drukte Controle-Z. Toevoegen -9 om de kill te forceren.


Wanneer u in de tekstconsole zit, kunt u ook proberen: Ctrl-SysRq. De kernel zou het proces moeten doden.

Of SysRq-k, kill alle processen op de huidige virtuele console (kan ook X- en svgalib-programma's doden).

Opmerking: wanneer magische SysRq-sleutels worden gebruikt om een ​​bevroren grafische afbeelding te vernietigen   programma, heeft het programma geen kans om de tekstmodus te herstellen. Dit kan maken   alles onleesbaar.

Zien: Magic SysRq-sleutel en de opdrachtcombinaties.


4
2017-10-01 11:47





Om te stoppen met man, gebruik q Verlaten vi gebruik :q


3
2017-11-20 22:46





Proberen Ctrl+alt+Backspace 

Als u ubuntu 10.04 gebruikt, wilt u deze sleutel inschakelen.

In staat te stellen Controle-alt-Backspace

Ga naar Systeem -> Voorkeuren -> Toetsenbord

Selecteer de Tabblad Layouts en klik op de Lay-outopties.

kiezen Toetssequentie om de X-server te doden en inschakelen Controle + alt +Backspace.

Notitie:

persing Ctrl-alt-Backspace herstart je X-server.


-1
2017-11-20 11:56



Bewerkte de vraag om duidelijk te maken dat ik het proces vanuit de terminal wil beëindigen. - Olivier Lalonde


Het is mogelijk dat u de snelkoppeling van de kopie hebt gewijzigd van:

CTRL+VERSCHUIVING+C

Naar

CTRL+C

Op die manier, wanneer je een proces probeert te doden, de CTRL+C werkt niet.

Probeer de snelkoppelingskopie te vervangen door CTRL+VERSCHUIVING+C.


-2
2017-11-20 19:36



Het wijzigen van de kopieersneltoets is niet relevant om te zorgen dat een proces wordt beëindigd! - SuB
Kunt u uw antwoord een beetje uitbreiden? Stap voor stap zou ideaal zijn, vooral zodat het OP kan volgen met uw suggestie. :) - ThatGuy