Hvordan fungerer Ctrl + Z med kommandolinjen ikke med tastaturet? [lukket]
On februar 10, 2021 by adminKommentarer
- Du spurgte dette før på unix.stackexchange.com/questions/386200 , og med denne duplikat har du faktisk ikke gjort det klart, hvad folk har bedt om at blive gjort klart.
- Ikke en sand duplikat. Dette spørgsmål handler om Ctrl-Z, det andet handler om Ctrl-S, men svaret er faktisk det samme.
- Nej, det andet handler ikke om Ctrl + S. Mindst så meget er angivet i spørgsmålet.
Svar
Control + Z skriver kontroltegnet susp
, som sender signalet SIGTSTP
(nummer 20 på Linux amd64, 24 on Solaris amd64, 18 på FreeBSD amd64 … det er bedre at undgå at henvise til signaler efter nummer, da det ikke er bærbart) til alle processerne i terminalens procesgruppe.
Du kan send et signal for at stoppe en proces fra kommandolinjen ved hjælp af kill
-kommandoen.
kill -s STOP <pid>
(hvor <pid>
er idet for den proces, du vil suspendere) eller, hvis du vil adressere alle processer i et program med et bestemt navn (teknisk set alle processer, hvis navn matcher et givet udvidet regulært udtryk):
pkill -STOP xterm
(hvor xterm
er et eksempelnavn).
Send tegn, når du har brug for at genoptage processerne al SIGCONT
på samme måde.
Kommentarer
- Det sender SIGTSTP (20 på Linux til amd64 i det mindste) signal, ikke SIGSTOP, og til forgrundsprocessen gruppe af terminalenheden. SIGTSTP kan håndteres, ikke SIGSTOP.
- men hvordan man ved antallet af sessioner, som terminalen kører
- Hvad betyder
pid
? - @abuali " PID " er forkortelse for " proces-id ". Se da.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas hvordan konw
process ID
specielt i terminalen åbnet
Svar
Hvis du ville stoppe alle de processer, der har /dev/pts/12
som deres kontrolterminal (inklusive alle forgrunds- og baggrundsjob, der kører i terminalen og skallen), kan du gøre:
pkill -STOP -t pts/12
Det ville også suspendere session lederen. I nogle tilfælde kan denne genoptages automatisk. For eksempel genoptager GNU screen
sessionslederen, så snart den opdager, at den er blevet suspenderet.
Hvis du vil sende SIGTSTP-signalet til forgrundsprocessen gruppe af den terminal som ^Z
vil du “gøre:
kill -s TSTP -- "-$pgid"
Hvor $pgid
er procesgruppe-idet for den forgrundsprocesgruppe. På Linux og BSDer på listen kan du finde ud af, hvad det er ved at køre ps -o tpgid= -p "$pid"
hvor $pid
er idet for enhver proces, der har terminalen som sin kontrolterminal. På de fleste systemer kunne enhver af disse processer også finde ud af det ved hjælp af tcgetpgrp()
.
I begge tilfælde genoptager du disse processer ved at sende SIGCONT-signalet i stedet for SIGSTOP / SIGTSTP.
Svar
Send STOP
signalet til den eller de processer, som du vil suspendere.
Du kan senere sende signal for at afbryde en suspenderet proces.
For eksempel:
pkill -STOP terminal
Dette vil suspendere alle terminal
processer.
pkill -CONT terminal
Dette vil afbryde alle processer med navnet terminal
.
Kommentarer
- men hvordan man ved antallet af sessioner terminalen kører
- @abuali I ' Jeg er ikke sikker på hvad du mener.
pkill
ser alle processer, der matcher det navn, du leverer, op og sender signalet til alle disse. Hvis du vil begrænse til en bestemt bruger, skal du tilføje-u username
.
Skriv et svar