Hoe werken Ctrl + Z via de opdrachtregel en niet via de toetsenbordtoets? [gesloten]
Geplaatst op februari 10, 2021 door adminReacties
- Je hebt dit eerder gevraagd op unix.stackexchange.com/questions/386200 , en met dit duplicaat heb je niet echt duidelijk gemaakt wat de mensen hebben gevraagd om duidelijk te worden gemaakt.
- Geen echt duplicaat. Deze vraag gaat over Ctrl-Z, de andere gaat over Ctrl-S, maar het antwoord is eigenlijk hetzelfde.
- Nee, de andere gaat niet over Ctrl + S. Zoveel staat er in de vraag tenminste.
Antwoord
Controle + Z schrijft het controleteken susp
, dat het signaal SIGTSTP
verzendt (nummer 20 op Linux amd64, 24 op Solaris amd64, 18 op FreeBSD amd64 … het is beter om te vermijden om naar signalen te verwijzen op nummer omdat dat niet draagbaar is voor alle processen in de voorgrondprocesgroep van de terminal.
Dat kan. stuur een signaal om een proces te stoppen vanaf de opdrachtregel door het kill
-commando te gebruiken.
kill -s STOP <pid>
(waarbij <pid>
is de id van het proces dat u wilt onderbreken) of, als u alle processen van een programma met een bepaalde naam wilt adresseren (technisch gezien, alle processen waarvan de naam overeenkomt met een bepaalde uitgebreide reguliere expressie):
pkill -STOP xterm
(waarbij xterm
een voorbeeldnaam is).
Stuur een teken als u de processen moet hervatten al SIGCONT
op dezelfde manier.
Reacties
- Het stuurt de SIGTSTP (20 op Linux op amd64 tenminste) signaal, niet SIGSTOP, en naar de voorgrond proces groep van het eindapparaat. SIGTSTP kan worden afgehandeld, niet SIGSTOP.
- maar hoe je het aantal sessies weet dat de terminal draait
- Wat is de betekenis van
pid
? - @abuali " PID " is een afkorting voor " proces-ID ". Zie en.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas hoe konw
process ID
speciaal in de geopende terminal
Antwoord
Als je alle processen wilt stoppen die /dev/pts/12
als hun controlerende terminal hebben (inclusief alle voorgrond- en achtergrondtaken die in die terminal en de shell worden uitgevoerd), zou je kunnen doen:
pkill -STOP -t pts/12
Dat zou ook de sessieleider opschorten. In sommige gevallen kan die automatisch worden hervat. GNU screen
hervat bijvoorbeeld de sessieleider zodra het detecteert dat deze is onderbroken.
Als je het SIGTSTP-signaal naar het voorgrondproces wilt sturen groep van die terminal zoals ^Z
zou je “doen:
kill -s TSTP -- "-$pgid"
Waar $pgid
is de procesgroep-ID van die voorgrondprocesgroep. Op Linux en BSDs op lijst kun je achterhalen welke het is door ps -o tpgid= -p "$pid"
uit te voeren, waarbij $pid
is de id van elk proces dat die terminal als controlerende terminal heeft. Op de meeste systemen kan elk van die processen het ook achterhalen met tcgetpgrp()
.
In beide gevallen hervat je die processen door het SIGCONT-signaal te sturen in plaats van SIGSTOP / SIGTSTP.
Antwoord
Stuur het STOP
-signaal naar het proces / de processen die u wilt onderbreken.
U kunt later het signaal om een onderbroken proces ongedaan te maken.
Bijvoorbeeld:
pkill -STOP terminal
Dit zou alle terminal
processen.
pkill -CONT terminal
Dit zou alle processen met de naam terminal
opheffen.
Reacties
- maar hoe weet je het aantal sessies dat de terminal draait
- @abuali I ' Ik weet niet zeker wat je bedoelt.
pkill
zal alle processen opzoeken die overeenkomen met de naam die u opgeeft en het signaal naar al deze processen sturen. Als je wilt beperken tot een bepaalde gebruiker, voeg dan-u username
toe.
Geef een reactie