cmd-Differenz zwischen quit und exit

-1

Wenn du schreibst telnet In cmd müssen Sie eingeben quit da raus, aber wenn Sie tippen wmic, beide quit und exit wird funktionieren.

Welcome to Microsoft Telnet Client

Escape Character is 'CTRL+]'

Microsoft Telnet> exit
Invalid Command. type ?/help for help
Microsoft Telnet> quit    
C:\windows\system32>

C:\windows\system32>wmic
wmic:root\cli>quit

C:\windows\system32>

C:\windows\system32>wmic
wmic:root\cli>exit

C:\windows\system32>

Ebenfalls, Ctrl+C soll einen laufenden Prozess aber abbrechen oder einen Batch-Job beenden Ctrl+C wird auch aus wmic aber nicht telnet.

Was ist das Bedürfnis für all diese Verwirrung? Warum kann es nicht nur einen Standard geben?

rahuldottech
quelle
4
wmic ist ein von Microsoft geschriebenes Produkt. telnet läuft auf vielen verschiedenen Betriebssystemen und verfügt über eine gemeinsame Standardbenutzeroberfläche.
DavidPostill
Lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen, oder markieren Sie eine Antwort, wenn eine ausreichende Information bereitgestellt wurde.
Abraxas

Antworten:

3

Der Grund dafür ist, dass die Anwendungen getrennt sind. Telnet startet das Programm telnet.exe in Ihrem Terminal, und alles, was Sie eingeben, geschieht innerhalb von telnet.exe und NICHT in cmd.exe (Ihre Eingabeaufforderung).

wmic.exe ist ein separates Programm mit eigenen Befehlen. Es kann einen anderen Exit-Befehl als andere Programme enthalten. Sie können in der Befehlsliste für jedes Programm, das Sie in der Eingabeaufforderung ausführen, nachsehen. Es gibt einige Standards, die jedoch nicht unbedingt erforderlich sind.

Wenn Sie eine Python-Sitzung innerhalb der Eingabeaufforderung starten, unterbricht Ihre Strg + C eine Python-Aktivität, aber exit () wäre der Befehl zum Beenden.

Lassen Sie mich wissen, wenn Sie weitere Erklärungen benötigen, es ist im Grunde nur so, dass jedes Programm (telnet.exe, nslookup.exe, wmic.exe) einen eigenen Satz an Befehlen hat, und diese sind nicht immer standardisiert, da unterschiedliche Entwickler oder Teams oder Änderungen vorgenommen werden im Laufe der Zeit waren an jedem Programm beteiligt.

Wie in einem Kommentar oben erwähnt, ist Telnet auch ein älterer standardisierter Dienst, der von vielen Anbietern verwendet wird. Wmic ist ein von Microsoft entwickeltes Produkt. Dies ist eine weitere Sache, die bei der Betrachtung standardisierter Befehle zu berücksichtigen ist. wmic usw. verfügen über standardisierte Befehle, während plattformübergreifende Tools (Telnet, SSH usw.) für alle Plattformen (Mac, * Nix, Windows) gleich sind, jedoch nicht in Übereinstimmung mit den von Apple entwickelten oder von Microsoft entwickelten Common Best Practices.

Abraxas
quelle
Warum wird Strg + C von wmic beendet, wenn es sich um einen Abbruchbefehl handelt?
rahuldottech
Programme werden mit einer spezifischen Antwort auf Abbruch- / Unterbrechungsbefehle codiert. Einige von ihnen benötigen nur Unterbrechungsbefehle, um die Verarbeitung aktueller Argumente zu stoppen (z. B. das Powershell-Skript zu brechen). Andere Befehle behandeln sie möglicherweise als "Zwangsbeendigungsprozess". Dies ist ein weniger sauberes "Quit" (etwa wie Strg + W oder alt + f4 bei einigen Programmen) Aber auch hier liegt der Code für die spezifische Anwendung, der bestimmt, wie Tastenkombinationen und bestimmte Signale (TERM, KILL, HALT usw.) behandelt werden.
Abraxas
2

Hier sind die Dokumente von Windows SDK. Was das betrifft? Warum , so dass Programme ihre Arbeitsweise anpassen können Strg + C ist auch der Zeichencode 3, der Steuercode ist. Denken Sie auch daran CMD ist nur ein gewöhnliches Konsolenprogramm wmic oder ftp.

Konsolensteuerungshandler

Jeder Konsolenprozess verfügt über eine eigene Liste von Steuerelementfunktionen, die vom System aufgerufen werden, wenn der Prozess ein STRG + C-, STRG + UNTERBRECHUNGS- oder STRG + CLOSE-Signal empfängt. Anfangs enthält die Liste der Steuerhandler für jeden Prozess nur eine Standardhandlerfunktion, die die ExitProcess-Funktion aufruft. Ein Konsolenprozess kann zusätzliche HandlerRoutine-Funktionen hinzufügen oder entfernen, indem die SetConsoleCtrlHandler-Funktion aufgerufen wird. Diese Funktion wirkt sich nicht auf die Listen der Steuerhandler für andere Prozesse aus. Wenn ein Konsolenprozess eines der Steuersignale empfängt, ruft er die Handlerfunktionen auf einer zuletzt registrierten, zuerst aufgerufenen Basis auf, bis einer der Handler TRUE zurückgibt. Wenn keiner der Handler TRUE zurückgibt, wird der Standardhandler aufgerufen.

Der Parameter dwCtrlType der Funktion gibt an, welches Steuersignal empfangen wurde, und der Rückgabewert gibt an, ob das Signal verarbeitet wurde.

Ein Beispiel für eine Steuerhandlerfunktion finden Sie unter Registrieren einer Steuerhandlerfunktion.

CTRL + C- und CTRL + BREAK-Signale

Die Tastenkombinationen CTRL + C und CTRL + BREAK werden durch Konsolenprozesse besonders behandelt. Wenn ein Konsolenfenster den Tastaturfokus hat, wird STRG + C oder STRG + UNTBR standardmäßig als Signal (SIGINT oder SIGBREAK) und nicht als Tastatureingabe behandelt. Diese Signale werden standardmäßig an alle Konsolenprozesse weitergeleitet, die an die Konsole angeschlossen sind. (Einzelne Prozesse sind nicht betroffen.) Das System erstellt in jedem Client-Prozess einen neuen Thread, um das Ereignis zu behandeln. Der Thread löst eine Ausnahme aus, wenn der Prozess debuggt wird. Der Debugger kann die Ausnahme behandeln oder die unbehandelte Ausnahme fortsetzen.

STRG + BREAK wird immer als Signal behandelt, aber eine Anwendung kann das Standardverhalten von STRG + C auf zwei Arten ändern, die den Aufruf der Handlerfunktionen verhindern:

Die SetConsoleMode-Funktion kann den Eingabemodus ENABLE_PROCESSED_INPUT für den Eingangspuffer einer Konsole deaktivieren, sodass STRG + C als Tastatureingabe und nicht als Signal gemeldet wird.

Wenn SetConsoleCtrlHandler mit NULL- und TRUE-Werten für seine Parameter aufgerufen wird, ignoriert der aufrufende Prozess die STRG + C-Signale. Die normale STRG + C-Verarbeitung wird durch Aufrufen von SetConsoleCtrlHandler mit den Werten NULL und FALSE wiederhergestellt. Dieses Attribut des Ignorierens oder Nicht-Ignorierens von STRG + C-Signalen wird von untergeordneten Prozessen geerbt. Sie kann jedoch von jedem Prozess aktiviert oder deaktiviert werden, ohne dass dies Auswirkungen auf vorhandene Prozesse hat.

CTRL + CLOSE Signal

Das System erzeugt ein CTRL + CLOSE-Signal, wenn der Benutzer eine Konsole schließt. Alle an die Konsole angeschlossenen Prozesse empfangen das Signal, sodass jeder Prozess vor der Beendigung bereinigt werden kann. Wenn ein Prozess dieses Signal empfängt, kann die Handler-Funktion nach dem Ausführen von Bereinigungsvorgängen eine der folgenden Aktionen ausführen:

Rufen Sie ExitProcess auf, um den Prozess zu beenden.

Falsch zurückgeben. Wenn keine der registrierten Handlerfunktionen TRUE zurückgibt, bricht der Standardhandler den Prozess ab.

Rückgabe TRUE. In diesem Fall werden keine anderen Handlerfunktionen aufgerufen, und der Benutzer wird in einem Popup-Dialogfeld gefragt, ob der Prozess abgebrochen werden soll. Wenn der Benutzer den Prozess nicht beenden möchte, schließt das System die Konsole erst, wenn der Prozess endgültig beendet ist.

Senden Sie Kommentare zu diesem Thema an Microsoft

Erstellungsdatum: 02.10.2006

trigger
quelle
2

Alles quit. q Ausfahrt aus telnet Schale.

Beide exit und quit Ausfahrt aus wmic Schale.

exit geht aus cmd.exeDies ist die Windows-Eingabeaufforderungs-Shell.

Es hängt also davon ab, wo Sie sich befinden und was Sie verlassen, da Muscheln [wie interaktive Programme, die Befehle akzeptieren] und eigene Befehle haben.

w17t
quelle
-1 Zum letzten Satz schreiben Sie: "Es hängt also davon ab, wo Sie sich befinden und worauf Sie aufhören, da Muscheln ihre eigenen Befehle haben." & lt; -------- Seien Sie sich bewusst, dass cmd die Shell ist, die exit verwendet. Aber die Programme sind keine Muscheln. Ob es sich dabei um eine Hülle handelt oder nicht, ist irrelevant. Shells steuern nicht, was die Programme in ihnen zum Beenden verwenden. Außerdem sind 99% der ersten 3 Sätze in seiner Frage ohnehin angegeben. Dann ist Ihre vierte / letzte Zeile sehr irreführend.
barlop
1
Um meinen vorherigen Kommentar zu verdeutlichen: Shell hat viele Definitionen, ich beziehe mich auf ein interaktives Programm, das in diesem Kontext Befehle als Shell akzeptiert und die Eingabeaufforderung als Interpreter betrachtet. Ich möchte daraus schließen, dass es keine Standards geben muss, da es viele Anwendungen gibt, die interaktiv Eingaben anstelle von Befehlsschaltern akzeptieren.
w17t
1
ok das ist gut, ich sehe, dass deine Definition auch eine Standarddefinition ist webopedia.com/TERM/S/shell.html
barlop