Hvordan fungerer Ctrl + Z etter kommandolinjen, ikke med tastaturet? [lukket]
On februar 10, 2021 by adminKommentarer
- Du spurte dette før på unix.stackexchange.com/questions/386200 , og med dette duplikatet har du ikke klart gjort tingene som folk har bedt om å bli tydeliggjort.
- Ikke et ekte duplikat. Dette spørsmålet handler om Ctrl-Z, det andre handler om Ctrl-S, men svaret er faktisk det samme.
- Nei, det andre handler ikke om Ctrl + S. I det minste står det så mye i spørsmålet.
Svar
Control + Z skriver kontrolltegnet susp
, som sender signalet SIGTSTP
(nummer 20 på Linux amd64, 24 på Solaris amd64, 18 på FreeBSD amd64 … det er bedre å unngå å referere til signaler etter nummer som at det ikke er bærbart) til alle prosessene i forgrunnens prosessgruppe på terminalen.
Du kan send et signal for å stoppe en prosess fra kommandolinjen ved å bruke kill
-kommandoen.
kill -s STOP <pid>
(hvor <pid>
er id for prosessen du vil avbryte) eller, hvis du vil adressere alle prosesser i et program med et bestemt navn (teknisk sett, alle prosesser hvis navn samsvarer med et gitt utvidet vanlig uttrykk):
pkill -STOP xterm
(der xterm
er et eksempel på navn).
Send sign når du trenger å gjenoppta prosessene al SIGCONT
på samme måte.
Kommentarer
- Den sender SIGTSTP (20 på Linux på amd64 i det minste) signal, ikke SIGSTOP, og til forgrunnen prosessen gruppe til terminalenheten. SIGTSTP kan håndteres, ikke SIGSTOP.
- men hvordan vet du antall økter terminalen kjører
- Hva er betydningen av
pid
? - @abuali " PID " er forkortelse for " prosess-ID ". Se en.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas hvordan konw
process ID
spesial i terminalen åpnet
Svar
Hvis du ville stoppe alle prosessene som har /dev/pts/12
som kontrollerende terminal (inkludert alle forgrunn- og bakgrunnsjobber som kjører i terminalen og skallet), kan du gjøre:
pkill -STOP -t pts/12
Det vil også suspendere sesjonslederen. I noen tilfeller kan denne gjenopptas automatisk. For eksempel gjenopptar GNU screen
sesjonslederen så snart den oppdager at den er suspendert.
Hvis du vil sende SIGTSTP-signalet til forgrunnsprosessen. gruppe av den terminalen som ^Z
vil du «gjøre:
kill -s TSTP -- "-$pgid"
Hvor $pgid
er prosessgruppe-ID for den forgrunnsprosessgruppen. På Linux og BSDer på listen kan du finne ut hvilken det er ved å kjøre ps -o tpgid= -p "$pid"
der $pid
er id for enhver prosess som har terminalen som sin kontrollterminal. På de fleste systemer kan noen av disse prosessene også finne den ved hjelp av tcgetpgrp()
.
I begge tilfeller fortsetter du prosessene ved å sende SIGCONT-signalet i stedet for SIGSTOP / SIGTSTP.
Svar
Send STOP
signalet til prosessen (e) som du vil suspendere.
Du kan senere sende signal om å avbryte en suspendert prosess.
For eksempel:
pkill -STOP terminal
Dette vil suspendere alle terminal
prosesser.
pkill -CONT terminal
Dette vil avbryte alle prosesser kalt terminal
.
Kommentarer
- men hvordan vet du antall økter terminalen kjører
- @abuali I ' er ikke sikker på hva du mener.
pkill
vil slå opp alle prosesser som samsvarer med navnet du gir, og sende signalet til alle disse. Hvis du vil begrense til en bestemt bruker, kan du legge til-u username
.
Legg igjen en kommentar