Wie funktioniert Strg + Z über die Befehlszeile und nicht über die Tastatur? [geschlossen]
On Februar 10, 2021 by adminKommentare
- Sie haben dies zuvor unter unix.stackexchange.com/questions/386200 gefragt. und mit diesem Duplikat haben Sie die Dinge, um die die Leute gebeten haben, nicht klargestellt.
- Kein echtes Duplikat. Bei dieser Frage geht es um Strg-Z, bei der anderen um Strg-S, aber die Antwort ist tatsächlich dieselbe.
- Nein, bei der anderen geht es nicht um Strg + S. Zumindest so viel wird in der Frage angegeben.
Antwort
Steuerung + Z schreibt das Steuerzeichen susp
, das das Signal SIGTSTP
sendet (Nummer 20 unter Linux amd64, 24 on Solaris amd64, 18 unter FreeBSD amd64 … Es ist besser zu vermeiden, auf Signale nach Nummer zu verweisen, da diese nicht portierbar sind, und zwar auf alle Prozesse in der Vordergrundprozessgruppe des Terminals.
Sie können Senden Sie ein Signal, um einen Prozess über die Befehlszeile zu stoppen, indem Sie den Befehl kill
verwenden.
kill -s STOP <pid>
(wobei <pid>
ist die ID des Prozesses, den Sie anhalten möchten) oder, wenn Sie alle Prozesse eines Programms mit einem bestimmten Namen adressieren möchten (technisch alle Prozesse, deren Name mit einem bestimmten erweiterten Namen übereinstimmt regulärer Ausdruck):
pkill -STOP xterm
(wobei xterm
ein Beispielname ist).
Wenn Sie die Prozesse fortsetzen müssen, senden Sie ein Zeichen al SIGCONT
auf die gleiche Weise.
Kommentare
- Es sendet das SIGTSTP (20 unter Linux) mindestens amd64) Signal, nicht SIGSTOP, und an den Vordergrundprozess Gruppe des Endgeräts. SIGTSTP kann behandelt werden, nicht SIGSTOP.
- , aber wie man die Anzahl der Sitzungen erkennt, auf denen das Terminal ausgeführt wird
- Was bedeutet
pid
? - @abuali " PID " steht für " Prozess-ID ". Siehe en.wikipedia.org/wiki/Process_identifier
- @ St é phane Chazelas how konw
process ID
speziell im geöffneten Terminal
Antwort
Wenn Sie alle Prozesse stoppen möchten, deren steuerndes Terminal /dev/pts/12
ist (einschließlich aller in diesem Terminal und der Shell ausgeführten Vordergrund- und Hintergrundjobs), können Sie Folgendes tun:
pkill -STOP -t pts/12
Dadurch würde auch der Sitzungsleiter angehalten. In einigen Fällen kann dieser automatisch fortgesetzt werden. Beispielsweise setzt GNU screen
den Sitzungsleiter fort, sobald festgestellt wird, dass er angehalten wurde.
Wenn Sie das SIGTSTP-Signal an den Vordergrundprozess senden möchten Gruppe dieses Terminals wie ^Z
würden Sie „tun:
kill -s TSTP -- "-$pgid"
Wobei $pgid
ist die Prozessgruppen-ID dieser Vordergrundprozessgruppe. Unter Linux und BSDs in der Liste können Sie herausfinden, um welche es sich handelt, indem Sie ps -o tpgid= -p "$pid"
ausführen, wobei $pid
ist die ID eines Prozesses, dessen Terminal das steuernde Terminal ist. Auf den meisten Systemen kann jeder dieser Prozesse dies auch mithilfe von tcgetpgrp()
herausfinden.
In beiden Fällen setzen Sie diese Prozesse fort, indem Sie das SIGCONT-Signal anstelle von SIGSTOP / SIGTSTP senden.
Antwort
Senden Sie das Signal STOP
an die Prozesse, die Sie anhalten möchten.
Sie können später das Signal signalisiert, einen angehaltenen Prozess aufzuheben.
Zum Beispiel:
pkill -STOP terminal
Dies würde alle terminal
Prozesse.
pkill -CONT terminal
Dadurch werden alle Prozesse mit dem Namen terminal
aufgehoben.
Kommentare
- , aber wie man die Anzahl der Sitzungen erkennt, die das Terminal ausführt
- @abuali I ' Ich bin mir nicht sicher, was du meinst.
pkill
sucht nach allen Prozessen, die mit dem von Ihnen angegebenen Namen übereinstimmen, und sendet das Signal an alle. Wenn Sie sich auf einen bestimmten Benutzer beschränken möchten, fügen Sie-u username
hinzu.
Schreibe einen Kommentar