Ich kann die Kombination "Strg + C" nicht verwenden, da sie ein Kill-Signal an die Sitzung sendet.
Ctrl+ Csoll normalerweise ein Interrupt-Signal senden . Das Interruptsignal ist Signal 2. Es tut also, was beabsichtigt war.
Killed by signal 2
Diese Meldung wird normalerweise nicht angezeigt, ist aber ganz richtig. Der Prozess beendet , da es ein Signal 2, das empfangene Unterbrechungssignal erzeugt wird durch +SIGINT
CtrlC
Lassen Sie uns zuerst sehen, welche Tastenkombination dem Interrupt-Signal entspricht
$ stty -a | grep intr
intr = ^C
Überprüfen wir nun den numerischen Wert des Interruptsignals
$ man 7 signal
...
Signal Value Action Comment
-----------------------------------------------------------------------
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process
SIGINT 2 Term Interrupt from keyboard
SIGQUIT 3 Core Quit from keyboard
SIGFPE 8 Core Floating point exception
SIGKILL 9 Term Kill signal
SIGSEGV 11 Core Invalid memory reference
Beachten Sie, dass das KILL-Signal das Signal 9 (nicht 2) ist. Sie können jedes dieser Signale mit dem kill
Befehl senden, aber nur eines davon ist ein KILL-Signal und es ist kein Signal 2.
Es bleibt also die Frage, was diese Nachricht "Getötet durch Signal 2" erzeugt.
Wenn wir uns https://stackoverflow.com/questions/3165511/how-to-make-terminal-not-print-killed-by-signal-2-on-catching-a-sigint anschauen , sehen wir, dass diese Nachricht erzeugt werden kann Wenn Sie über ein Skript verfügen, mit trap SIGINT
dem Signale abgefangen und spezielle Aktionen ausgeführt werden.
Vielleicht haben Sie einen top
Alias oder ein top
Skript früher $PATH
als /usr/bin
?
$ type top
top is /usr/bin/top
Sie schlagen vor, dass eine SSH-Sitzung von * nix Computer main
zu * nix Computer beendet client
wird. Sie werden an einer * nix-Shell-Eingabeaufforderung weitergeleitet.
Aus Ihrer Erwähnung von MobaXterm als Alternative zu PuTTY schließe ich, dass Sie die Windows-Version von PuTTY verwenden, nicht die * nix-Version von PuTTY. Wenn ja, ist nicht klar, warum Ihre SSH-Verbindung aus zwei Teilen besteht (Win-PC -> "main" -> "client").
Wenn Sie PuTTY verwenden, um sich bei main anzumelden, und sich dann bei ssh
client anzumelden, ist es nicht besonders überraschend, dass PuTTYs ^ C von main behandelt und nicht an client für übergeben wird top
.
Wir können auf https://unix.stackexchange.com/questions/102061/ctrl-c-handling-in-ssh-session verweisen, in dem dieses Thema behandelt wird.
ssh remotehost
Führt eine interaktive Sitzung auf RemoteHost durch. Auf der Clientseite versucht ssh, das von stdin verwendete tty auf "raw" zu setzen, und sshd weist auf dem Remote-Host ein Pseudo-tty zu und führt Ihre Shell als Login-Shell aus (z. B. -bash).
Wenn Sie den Raw-Modus einstellen, werden Zeichen, die normalerweise Signale senden würden (z. B. Strg-C und Strg-), nur in den Eingabestream eingefügt. ssh sendet solche Zeichen so wie sie sind an den Remote-Host, wo sie wahrscheinlich SIGINT oder SIGQUIT senden und in der Regel jeden Befehl beenden und Sie zu einer Shell auf dem Remote-Host zurückkehren. Die SSH-Verbindung bleibt bestehen, solange die Remote-Shell aktiv ist.
...
ssh remotehost command args ...
Führt eine nicht interaktive Sitzung auf Remotehost aus. Auf der Clientseite setzt ssh das tty nicht auf den Raw-Modus (außer zum Einlesen eines Passworts oder einer Passphrase). Wenn Sie Ctrl-C eingeben, wird ssh mit SIGINT gesendet und sofort beendet, ohne dass eine Verbindung zum Remotehost hergestellt wird.
Ich vermute also, dass Ihre PuTTY-Sitzung anders konfiguriert ist als Ihre MobaXterm-Sitzung und dass einige Dinge im Gange sind, von denen Sie (und daher auch wir) nichts wissen.
PuTTY sendet kein Signal, sondern ein ASCII-Steuerzeichen. Dies ist leicht zu beweisen. Wir bitten die Shell nur, das ASCII-Steuerzeichen 0x03 (ETX, Strg + C) von der Shell nicht speziell zu behandeln und dann zu prüfen, was PuTTY sendet:
$ stty intr ^A
$ cat -v
I will now press Ctrl + C ^C
I will now press Ctrl + A
$ $ echo $?
130
Siehe http://tldp.org/LDP/abs/html/exitcodes.html 130 = 128 + 2 = Signal 2. In diesem Fall habe ich ^ A verwendet, um 0x01 an die Shell zu senden, die Signal 2 an den top
Prozess gesendet hat. ^ C hat gerade 0x03 gesendet, was cat-V
als ^ C angezeigt wird .
Ich würde also NICHT versuchen herauszufinden, warum Putty SIGINTR "sendet", wenn mobaXterm dies nicht tut. Keiner von ihnen tut das. Sie senden nur ein ASCII-Steuerzeichen.
Schauen Sie sich an, wie Sie PuTTY aufrufen. Klicken Sie dazu auf ein Desktopsymbol. Verfügt dieses Symbol über Eigenschaften (Alt + Eingabetaste) mit zusätzlichen Parametern in Target? usw. usw.
Q
oderq
oben stehst, verlässt du es. Hast du es versucht ?