cmd 창을 클릭하면 정확히 어떻게됩니까?


44

cmd.exe를 실행 하고 localhost를 ping 한다고 가정 하십시오 . 그런 다음 localhost를 다시 ping하지만 창을 클릭하면 enter 키를 누를 때까지 ping이 중지됩니다 .

창을 클릭하면 정확히 어떻게됩니까? 프로세스 또는 다른 것을 일시 중단합니까? 이 문제를 명확히하기 위해 스크린 샷을 첨부했습니다.

참고 : 스크린 샷에서 볼 수 있듯이 실제로 마우스를 클릭하지 않고 드래그하여 창에 흰색 상자를 만듭니다.

편집 : 추가 설명 : 실제로 알고 싶은 것은 창을 드래그하면 cmd 프로세스가 중단되는지 여부입니다.

편집 : 더 명확한 설명 : 빠른 편집을 사용하고 있으며 Enter 키를 누르면 선택한 내용이 복사됩니다. 내가 모르는 것은 백그라운드에서 일어나는 일입니다.

여기에 이미지 설명을 입력하십시오


2
BTW, 당신은 UserVoice에 대한 투표를하실 수 있습니다이 동작이 변경하세요 : wpdev.uservoice.com/forums/...
칼 월시

좋은. 나는 그것에 투표했다.
Adam Arold

투표는 저를 404 페이지로 안내합니다
Kelly Bang

1
그리고 더욱 중요한 것은이 무시 무시한 기능을 끄는 방법입니다. stackoverflow.com/a/37578608/463967
Alan Macdonald

답변:


27

cmd.exe 창에서 일부 텍스트를 선택하면 다음에 표준 출력 (또는 cmd.exe 창에 표시되는 데이터 스트림 인 STDOUT)에 쓸 때까지 백그라운드에서 프로세스가 수행됩니다.

선택 모드를 종료하면 프로세스가 정상적으로 재개됩니다.

ping www.google.com -tcmd.exe 창 에 입력 하고 출력의 일부 영역을 선택 하여 이를 테스트 할 수 있습니다 . 일시 정지 된 것을 볼 수 있으며 선택을 해제하면 출력이 재개됩니다.

편집 : Fran의 의견에 따라 Wireshark와 같은 도구를 사용하여 선택을 한 후에도 활동이 계속 발생하고 중단되는 것을 볼 수 있습니다.


3
그것만으로는 테스트하지 않습니다. 또한 Wireshark를 실행하고 ICMP 패킷 전송이 중지되는지 확인해야합니다. 그렇다면 프로세스가 일시 중단 된 것입니다. 그렇지 않으면 프로세스가 일시 중단되지 않고 출력이 단순히 버퍼링됩니다 (버퍼가 가득 찰 때까지 일시 중단되거나 데이터가 손실 됨).
Fran

1
나는 @Fran이 옳다고 확신합니다. 선택 모드에서 충분히 오래 기다렸다면 전체 출력이 한 번에 나타나지 않습니까?
이즈 카타

1
이것은 나에게 많은 짜증을 냈지만 cmd 창의 속성으로 이동하면 "빠른 편집 모드"를 선택 해제 할 수 있으며 창을 클릭하여 선택 모드로 들어 가지 않는다는 것을 알았습니다.
Zitrax

2
@Zitrax 네, 실수로 이런 일이 발생하는 것을 방지 할 수 있습니다. 나는 종종 명령 창에서 물건을 복사하므로 그렇게하지 않습니다. (실제로 나는 그 문제가없는 Consolez 를 사용합니다 )
JohnL

1
이를 " 차단 "이라고합니다. 즉, 응용 프로그램이 호출 write()되지만 중단됩니다.
Attie

49

명령 프롬프트 창을 클릭하면 콘솔 호스트는 더 이상 출력을 쓸 수 없습니다. 응용 프로그램 자체는 계속 실행되지만 화면에 아무것도 기록되지 않습니다.

물론 단일 스레드 만있는 한 기본적으로 프로세스를 고정시키는 것과 같습니다. 단일 스레드가 더 많은 작업을 수행하기 전에 일부 출력을 쓰려고 시도합니다.

실행 ping -t localhost하고 명령 프롬프트 창을 클릭하면 Process Explorer로ping.exe스레드 의 호출 스택을 검사 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

우리는 ping.exe출력을 작성하려고 시도한 것을 볼 수 있습니다 . write()C 런타임 라이브러리에서 호출 되었습니다. 이 함수는 어느 시점에서 GetConsoleMode를 호출 합니다 . 이 기능은 사용자가 현재 마크 모드인지 확인하고 필요한 경우 실행을 차단합니다.

추가 분석

우리의 행동 검사하여 증명이 동작을 촉진 할 수 ping와이어 샤크를

실행하면 ping -t superuser.comWireshark에서 다음 출력이 표시됩니다.
여기에 이미지 설명을 입력하십시오

이제 명령 프롬프트에 상자를 표시해 봅시다.
여기에 이미지 설명을 입력하십시오
갑자기 Wireshark에 더 이상 핑이 기록되지 않습니다. ping더 이상 패킷을 보내지 않습니다.

그러나 우리는 이미 그것을 알고 ...

출력이 실제로 문제인지 확인하십시오! 출력을 NUL장치로 보내 봅시다 .

여기에 이미지 설명을 입력하십시오

이제 더 이상 출력이 없습니다. 이제 하루 종일 상자에 텍스트를 표시 할 수 있습니다. 패킷은 Wireshark에 기록됩니다.

여기에 이미지 설명을 입력하십시오


원래 답변에 대해 +1하지 않은 경우 "추가 분석"에 대해 +1을하겠습니다
JohnL

6

창이 표시 모드로 들어갔 기 때문입니다. Enter 키를 누르면 선택한 텍스트가 클립 보드에 복사됩니다. 내 지식으로는, 이것에 대한 설정이 없으므로 창을 클릭 할 때 왜 그렇게하는지 확실하지 않습니다. 일반적으로 마우스 오른쪽 버튼을 클릭하고 "마크"를 누르십시오. 키보드에 키가 끼어 있지 않은지 확인하십시오.


"마크 모드"는 무엇을합니까? 프로세스가 일시 중단됩니까?
Adam Arold

마크 모드는 명령 창에서 텍스트를 복사하는 데 사용됩니다. AFAIK는 다른 용도로 사용될 수 있지만 유일하게 사용됩니다.
Garrett

7
이 설정을 빠른 편집 모드라고합니다. 왼쪽 상단에서 아이콘을 클릭하고 옵션 탭에서 속성을 선택한 다음 빠른 편집 모드를 선택하십시오. 내가 아는 한, 프로세스는 콘솔과 상호 작용해야 할 때까지 백그라운드에서 계속 진행되며,이 시점에서 콘솔은 차단됩니다.
JohnL

@JohnL 귀하의 의견이 내가 찾는 것이므로 답변을 작성하십시오.
Adam Arold

@edem 답변 추가 :)
JohnL

6

CMD 창은 화면을 클릭하면 자동으로 편집 모드로 들어가는 빠른 편집 모드입니다. Enter는 흰색 상자에 텍스트를 복사하고 편집 모드를 종료하기위한 것입니다.

일반적으로 CMD는 검은 색 화면을 마우스 오른쪽 버튼으로 클릭하고 마크를 선택하는 경우에만 편집 모드로 들어갑니다.

다시 정상으로 변경하려면 창의 제목 표시 줄을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하고 옵션 탭을 선택한 다음 "빠른 편집 모드"를 선택 해제하고 확인을 클릭하십시오.


3

창에서 복사 할 텍스트를 선택하면 ( Mark모드에 있을 때 ) 시스템은 해당 창에서 현재 프로세스를 일시 중단합니다.

배치 파일 예 :

:test
echo %0
goto test

이것이 실행될 때, 복사 할 영역을 표시하자마자 화면이 스크롤을 멈 춥니 다.


배치 파일이 인 것을 제외하고는 똑같은 것을 게시하려고했습니다 echo blah↵%0. :-)
Synetech

1

모두가 훌륭하게 지적했듯이 마크 작업이 진행되는 동안 추가 출력의 진행이 차단됩니다. 또한 마우스의 대체 클릭 (기본적으로 마우스 오른쪽 버튼 클릭)을 사용하거나 키보드의 Enter 키를 누르면 마크 모드를 종료하고 표시된 선택을 Windows의 붙여 넣기 버퍼에 복사 할 수 있습니다. 또 다른 방법이 있으며 화면 영역 표시를 포기하고 출력에서 ​​블록을 해제하기 위해 Esc 키를 누르는 것입니다. 해당 명령 창의 속성에서 빠른 편집 모드가 선택되었다고 가정합니다. 명령 창에 일부 텍스트를 선택하도록 지시하여이 상황을보다 의도적으로 얻을 수 있습니다.


0

cmd.exe 창 테두리 내에서 마우스를 클릭하거나 끌 때와 같이 프로세스가 "마크 모드"에서 일시 중지된다는 진술을 더욱 확증하기 위해 진행중인 인스턴스를 완전히 완료 한 후에 만 ​​작업을 중지하려면 간접적 인 증거를 제공합니다.

[1378:000f][2018-10-08T13:26:20] END: Verifying package "AndroidEmulator,version=26.0.0.2"
[1378:000f][2018-10-08T13:26:20] BEGIN: Verifying package "AndroidImage_ARM_API23,version=20.0.0.3"
[1378:000f][2018-10-08T13:26:20] Verifying package 'AndroidImage_ARM_API23,version=20.0.0.3'
[1378:000c][2018-10-08T13:26:26] SHA256 verification for 'AndroidImage_x86_API23,version=20.0.0.3\x86-23_r20.zip' succeeded. Hash: X
[1378:0025][2018-10-08T14:09:03] BEGIN: Verifying "AndroidImage_ARM_API23,version=20.0.0.3\AndroidSDKPrivateInstall.ps1"
[1378:0012][2018-10-08T14:09:03] BEGIN: Verifying "AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip"
[1378:0012][2018-10-08T14:09:03] Authenticode verification returned 0x800b0003 for path: AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip.
[1378:0012][2018-10-08T14:09:03] Retrying validation for: AndroidImage_ARM_API23,version=20.0.0.3\armeabi-v7a-23_r20.zip
[1378:000c][2018-10-08T14:09:03] Authenticode verification returned 0x800b0003 for path: AndroidImage_x86_API23,version=20.0.0.3\x86-23_r20.zip.

Visual Studio 설치 명령 줄 유틸리티가 설치된 모든 작업 부하를 확인하는 Visual Studio 설치의 로깅 스트림을보고 있습니다.

13:26:26에 명령 프롬프트 창 내부를 클릭했습니다. "마크 모드"를 종료하기 위해 Enter 키를 누르면 14:09:03까지 출력 화면이 정지됩니다.

13:26:26 이후에 프로세스가 x86-23_r20.zip 해시를 확인하고 " 성공했습니다. 해시 : X "라는 메시지를 확인한 후 14:09:03에 다른 파일로 다시 시작합니다. " BEGIN : Verifying" [..] AndroidSDKPrivateInstall.ps1 "

일시 중지하는 동안 Visual Studio 설치 명령 줄 유틸리티는 처리중인 파일의 확인을 마치고 컨트롤을 콘솔로 반환 할 때 새로운 해시 확인 작업을 시작했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.