-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 .

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

3 ответа3

3

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

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 общими / передовыми методами.

2

Все quit , q выйти из оболочки telnet .

Оба exit и quit выход из wmic оболочки.

exit из программы cmd.exe , то есть оболочки командной строки Windows.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .