cmd-разница между выходом и выходом

-1

Если вы печатаете telnet в cmd вам нужно будет набрать quit чтобы выбраться оттуда, но если вы введете wmic, и то и другое quit а также exit буду работать.

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>

Также, Ctrl+C должен прервать запущенный процесс или завершить пакетное задание, но Ctrl+C также выйдет из wmic но нет telnet,

Зачем нужна вся эта путаница? Почему не может быть только один стандарт?

rahuldottech
источник
4
wmic это написанный Майкрофтом продукт. telnet работает в разных операционных системах и имеет общий стандартный пользовательский интерфейс.
DavidPostill
Дайте мне знать, если вам нужна дополнительная информация, или отметьте ответ, если он был предоставлен.
Abraxas

Ответы:

3

Причина этого заключается в том, что приложения являются отдельными. Telnet запускает программу telnet.exe в вашем терминале, и все, что вы вводите, происходит в telnet.exe, а не в cmd.exe (ваша командная строка).

wmic.exe - это отдельная программа с собственным набором команд, которая может иметь команду выхода, отличную от других программ. Вы можете просмотреть список команд для каждой программы, запущенной в командной строке, и есть некоторые стандарты, но они не «по необходимости».

Если бы вы запускали сеанс python внутри командной строки, ваши ctrl + c прервали бы действие python, но exit () была бы командой, которую нужно запустить для выхода.

Дайте мне знать, если вам нужно больше объяснений, чем это, в основном просто каждая программа (telnet.exe, nslookup.exe, wmic.exe) имеет свой уникальный набор команд, и они не всегда стандартизированы, потому что разные разработчик или команды или изменения со временем были связаны с каждой программой.

Как отмечалось в комментарии выше, telnet также является более старой стандартизированной службой, используемой многими поставщиками, тогда как wmic - это продукт, разработанный Microsoft, это еще одна вещь, которую следует учитывать при рассмотрении стандартизированных команд - например, было бы более вероятно, что Microsoft разработала инструменты ( wmic и т. д.) имеют стандартизированные команды, в то время как кроссплатформенные инструменты (telnet, ssh и т. д.) ведут себя одинаково на разных платформах (Mac, * nix, Windows), но не в соответствии с разработанными Apple или Microsoft общими / лучшими практиками.

Abraxas
источник
Почему Ctrl + C выходит из wmic, если это команда отмены ??
rahuldottech
Программы кодируются с определенным ответом на команды отмены / прерывания. Некоторые из них принимают только команды break, чтобы «остановить обработку текущих аргументов» (например, нарушение сценария powershell или python), другие могут воспринимать это как «принудительный процесс завершения», который является менее чистым «выходом» (возможно, как ctrl + w или alt + f4 в некоторых программах) Но, опять же, в коде для конкретного приложения определяется, как обрабатывать комбинации клавиш и конкретные сигналы (TERM, KILL, HALT и т. д.)
Abraxas
2

Вот документы из Windows SDK. Что касается Зачем Таким образом, программы могут адаптировать свою работу. Ctrl + C также является символьным кодом 3, который является управляющим кодом etx - конец текста. Также помните CMD это обычная консольная программа, вроде wmic или же ftp,

Консольные контроллеры

Каждый консольный процесс имеет свой собственный список функций-обработчиков управления, которые вызываются системой, когда процесс получает сигнал CTRL + C, CTRL + BREAK или CTRL + CLOSE. Изначально список обработчиков элементов управления для каждого процесса содержит только функцию-обработчик по умолчанию, которая вызывает функцию ExitProcess. Консольный процесс может добавлять или удалять дополнительные функции HandlerRoutine, вызывая функцию SetConsoleCtrlHandler. Эта функция не влияет на списки обработчиков управления для других процессов. Когда консольный процесс получает какой-либо из управляющих сигналов, он вызывает функции-обработчики на основе последней зарегистрированной, вызываемой в первую очередь, пока один из обработчиков не вернет TRUE. Если ни один из обработчиков не возвращает TRUE, вызывается обработчик по умолчанию.

Параметр dwCtrlType функции определяет, какой управляющий сигнал был получен, а возвращаемое значение указывает, был ли обработан сигнал.

Пример функции обработчика управления см. В разделе «Регистрация функции обработчика управления».

Сигналы CTRL + C и CTRL + BREAK

Комбинации клавиш CTRL + C и CTRL + BREAK получают особую обработку консольными процессами. По умолчанию, когда окно консоли имеет фокус клавиатуры, CTRL + C или CTRL + BREAK обрабатываются как сигнал (SIGINT или SIGBREAK), а не как ввод с клавиатуры. По умолчанию эти сигналы передаются всем процессам консоли, которые подключены к консоли. (Отдельные процессы не затрагиваются.) Система создает новый поток в каждом клиентском процессе для обработки события. Поток вызывает исключение, если процесс отлаживается. Отладчик может обработать исключение или продолжить обработку без обработки.

CTRL + BREAK всегда обрабатывается как сигнал, но приложение может изменить поведение CTRL + C по умолчанию двумя способами, предотвращающими вызов функций-обработчиков:

Функция SetConsoleMode может отключить режим ввода ENABLE_PROCESSED_INPUT для буфера ввода консоли, поэтому CTRL + C сообщается как ввод с клавиатуры, а не как сигнал.

Когда SetConsoleCtrlHandler вызывается со значениями NULL и TRUE для его параметров, вызывающий процесс игнорирует сигналы CTRL + C. Обычная обработка CTRL + C восстанавливается путем вызова SetConsoleCtrlHandler со значениями NULL и FALSE. Этот атрибут игнорирования или не игнорирования сигналов CTRL + C наследуется дочерними процессами, но он может быть включен или отключен любым процессом, не затрагивая существующие процессы.

CTRL + ЗАКРЫТЬ сигнал

Система генерирует сигнал CTRL + CLOSE, когда пользователь закрывает консоль. Все процессы, подключенные к консоли, получают сигнал, давая возможность каждому процессу очиститься перед завершением. Когда процесс получает этот сигнал, функция-обработчик может выполнить одно из следующих действий после выполнения любых операций очистки:

Вызовите ExitProcess, чтобы завершить процесс.

Вернуть ЛОЖЬ. Если ни одна из зарегистрированных функций-обработчиков не возвращает TRUE, обработчик по умолчанию завершает процесс.

Вернуть ИСТИНА. В этом случае никакие другие функции-обработчики не вызываются, и всплывающее диалоговое окно спрашивает пользователя, следует ли завершить процесс. Если пользователь решает не завершать процесс, система не закрывает консоль, пока процесс не завершится окончательно.

Отправить комментарии по этой теме в Microsoft

Дата постройки: 02.10.2006

trigger
источник
2

Все quit, q выход из telnet ракушка.

И то и другое exit а также quit выход из wmic ракушка.

exit выход из cmd.exeэто командная строка Windows.

Таким образом, это зависит от того, где вы находитесь и из чего вы выходите, так как оболочки [например, интерактивные программы, принимающие команды], имеют свои собственные команды.

w17t
источник
-1 В последнем предложении вы пишете: «Так, это зависит от того, где вы находитесь и из чего выходите, поскольку у оболочек есть свои собственные команды». & lt; -------- Убедитесь, что cmd - это оболочка, использующая выход. Но программы внутри него не являются оболочками. И неважно, раковина это или нет. Оболочки не контролируют то, что программы внутри них используют для выхода. Кроме того, 99% ваших первых 3 предложений в любом случае изложены в его вопросе. Тогда ваша четвертая / последняя строка очень вводит в заблуждение.
barlop
1
Чтобы пояснить мой предыдущий комментарий: у Shell есть много определений, я ссылаюсь на интерактивную программу, которая в этом контексте воспринимает команды как оболочку, относительно командной строки как интерпретатора. Я хочу сделать вывод, что не должно быть стандартов, так как есть много приложений, которые могут интерактивно принимать входные данные, а не переключатели команд.
w17t
1
хорошо, это хорошо, я вижу, ваше определение тоже стандартное webopedia.com/TERM/S/shell.html
barlop