Cmd penceresine tıklarsam tam olarak ne yapar?


44

Diyelim ki cmd.exe ve ping localhost çalıştırıyorum . Ondan sonra tekrar localhost'a ping yapıyorum ancak pencereye tıklıyorum ve enter tuşuna basıncaya kadar ping duruyor .

Tam olarak pencereye tıkladığımda ne olur? Süreci veya başka bir şeyi askıya alıyor mu? Bu sorunu açıklığa kavuşturmak için bir ekran görüntüsü ekledim.

Not: Ekranda gördüğünüz gibi pencerede beyaz bir kutu oluşturan fareyi kullanarak fareyi tıklatıp sürüklemiyorum.

Düzenleme: daha fazla açıklama: Gerçekten bilmek istediğim, pencereyi sürüklemenin cmd işlemini durdurup durdurmaması mı?

Düzenleme: daha da fazla açıklama: Hızlı Düzenleme kullandığımı biliyorum ve enter tuşuna bastığımda seçtiğim içerikleri kopyaladım. Bilmediğim, arka planda olan şey.

görüntü tanımını buraya girin


2
BTW, bu davranışın değişmesi için UserVoice’e oy verebilir: wpdev.uservoice.com/forums/…
Carl Walsh

Güzel. Ona oy verdim.
Adam Arold

Oylama beni sadece 404 sayfaya götürüyor
Kelly Bang

1
Ve daha da önemlisi, bu tanrı korkunç özelliğini nasıl kapatacağınız burada stackoverflow.com/a/37578608/463967
Alan Macdonald

Yanıtlar:


27

Cmd.exe penceresinde bir metin seçtiğinizde, işlem, bir sonraki Standart Çıktı (veya cmd.exe penceresinde gösterilen veri akışı olan STDOUT) yazana kadar arka planda devam eder.

Seçim modundan çıktığınızda, işlem normal şekilde devam eder.

Bunu ping www.google.com -tcmd.exe pencerenize yazarak ve çıktının bir bölümünü seçerek test edebilirsiniz . Duraklattığını göreceksiniz ve seçimi kaldırdığınızda çıktı devam edecek.

Düzenleme: Fran'in yorumuna göre, seçimi yaptığınız noktadan sonra etkinliğin devam ettiğini görmek için Wireshark gibi bir araç kullanabilirsiniz ve sonra durur.


3
Bu yalnız test etmiyor. Ayrıca Wireshark'ı çalıştırmanız ve ICMP paketlerinin gönderilmeyi durdurup durdurmadığına bakmanız gerekir. Öyleyse, sürecin askıya alındığı konusunda haklısınız. Aksi takdirde, işlem askıya alınmaz ve çıktı basitçe tamponlanır (tamponlar doluncaya kadar askıya alınır veya veriler kaybolur).
Fran

1
@Fran'ın haklı olduğuna eminim - seçim modunda yeterince uzun süre beklerseniz, bir sürü çıktı bir kerede görünmüyor mu?
Izkata

1
Bu beni çok rahatsız etti, ancak cmd pencerelerinin özelliklerine giderseniz "Hızlı düzenleme modunun" seçimini kaldırabileceğinizi ve pencereye tıklayarak seçim moduna girmeyeceğinizi öğrendim.
Zitrax,

2
@ Zitrax evet, bunun yanlışlıkla olmasını önleyebilirsiniz. Sık sık komut penceresinden şeyler kopyalarım, bu yüzden yapmam. (aslında, ben bu sorunu olmayan Consolez kullanıyorum )
JohnL

1
Buna " engelleme " denir ... yani: uygulama çağrılır write()ancak sıkışır.
Attie

49

Komut İstemi penceresine tıkladığınızda, konsol ana bilgisayarı artık çıktının yazılmasına izin vermeyecektir. Uygulamanın kendisi çalışmaya devam eder, ancak ekrana hiçbir şey yazılmaz.

Elbette, sadece tek bir iplik olduğu sürece, bu temelde işleminizin donmasıyla aynı şeydir. Tek iş parçacığı daha fazla iş yapmadan önce bazı çıktı yazmaya çalışır gibi.

Çalıştırıp ping -t localhostkomut istemi penceresini tıklatırsam, ana ping.exeiş parçasının çağrı yığınını İşlem Gezgini ile inceleyebilirim .

görüntü tanımını buraya girin

Bunun bir ping.exeçıktı yazmaya çalıştığını görebiliriz . write()C çalışma zamanı kütüphanesinde denir . Bu işlev, bir noktada GetConsoleMode öğesini çağırır . Görüldüğü gibi, bu işlev kullanıcının şu anda işaretleme modunda olup olmadığını kontrol edecek ve gerekirse yürütmeyi engelleyecektir.

Daha fazla analiz

Wiresharkping ile olan davranışını inceleyerek bu davranışı daha da kanıtlayabiliriz.

Çalıştırırken ping -t superuser.combiz Wireshark aşağıdaki çıktıyı bakın:
görüntü tanımını buraya girin

Şimdi komut isteminde bir kutuyu işaretleyelim.
görüntü tanımını buraya girin
Birdenbire, Wireshark'a artık ping girişi yapılmadı. pingartık herhangi bir paket göndermiyor.

Ama bunu zaten biliyorduk...

Doğru, çıktının gerçekten sorun olup olmadığını görelim ! Çıkışı NULcihaza yönlendirelim:

görüntü tanımını buraya girin

Şimdi, artık çıkış yok. Artık gün boyu kutudaki metni işaretleyebiliyoruz, paketler Wireshark'a giriş yapacak.

görüntü tanımını buraya girin


Orijinal cevap için zaten + 1'olmasaydım, "İleri analiz" için şimdi +
1'dim

6

Bunun nedeni, pencerenin İşaret moduna girmiş olmasıdır. Enter tuşuna bastığınızda, seçilen metni panoya kopyalar. Bildiğim kadarıyla, bunun için bir ayar yok, bu yüzden sadece pencereye tıkladığınızda neden böyle yaptığını emin değilim. Normalde sağ tıklayıp "İşaretle" butonuna basmanız gerekir. Klavyenizde hiçbir tuşun sıkışıp kalmadığından emin olun.


Ve "İşaret modu" ne yapar? Süreci askıya alıyor mu?
Adam Arold

İşaretleme modu, komut penceresinden metin kopyalamak için kullanılır. Tek kullanım olan AFAIK, sanırım başkaları da olabilir.
Garrett

7
Ayara Hızlı Düzenleme Modu denir. Sol üst köşedeki simgesine tıklayın, Özellikler'i seçin ve Seçenekler sekmesinden Hızlı Düzenleme Modu'nu seçin. Bildiğim kadarıyla, süreç konsolla etkileşime girmesi gerekene kadar arka planda devam edecek, hangi noktada engelleyecektir
JohnL

@JohnL lütfen bir cevap oluşturun çünkü yorumunuz aradığım şey.
Adam Arold

@edem bir cevap :) Eklenenler
JohnL

6

CMD pencereleriniz, ekrana tıkladığınızda otomatik olarak düzenleme moduna giren hızlı düzenleme modundadır. Enter, metni beyaz kutuya kopyalamak ve düzenleme modundan çıkmak içindir.

Normalde CMD sadece siyah ekrana sağ tıklayıp İşaretle'yi seçtiğinizde düzenleme moduna girer.

Normale dönmek için, pencerelerin başlık çubuğuna sağ tıklayın ve Özellikler'i seçin, Seçenekler sekmesini seçin ve "Hızlı Düzenleme Modu" seçimini kaldırın ve Tamam'a tıklayın.


3

Pencereden kopyalanacak metni seçtiğinizde ( Markmoddayken) sistem geçerli işlemi o pencerede askıya alır.

Örnek toplu iş dosyası:

:test
echo %0
goto test

bu çalıştırıldığında, kopyalanacak alanı işaretlediğimde, ekran kaydırma işlemini durduruyor


Aynı şeyi göndermek üzereydim (toplu iş dosyam hariç echo blah↵%0). :-)
Synetech

1

Herkes bu kadar güzel bir şekilde işaret ettiğinden, bir işaretleme işlemi devam ederken ek çıktıların ilerlemesi engellenir. Ayrıca, fareyi alternatif olarak tıklatarak (varsayılan olarak sağ tıklatarak) veya klavyenizdeki Enter tuşuna basarak İşaretleme modundan çıkıp işaretli seçimi Windows yapıştırma arabelleğine kopyalayabilirsiniz. Başka bir çıkış yolu var ve bu, bir ekran alanını işaretlemek ve çıkıştaki bloğu serbest bırakmak için Esc tuşuna basmak. Bu, bu komut penceresinin özelliklerinde QuickEdit modunun seçildiğini varsayar. Bu duruma, bir metin seçmek istediğiniz komut penceresine söyleyerek daha kasıtlı olarak da girebilirsiniz.


0

İşlemin "Mark modunda" duraklatıldığı, örneğin bir fare tıklaması sırasında veya cmd.exe penceresinin içinde sürüklendiği ifadesini daha da doğrulamak için, ancak işlemi devam eden örnekle tamamen bitirdikten sonra herhangi bir işlemi durdurarak dolaylı bir kanıt sunarım:

[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 Kurulum Komut Satırı Yardımcı Programının yüklü olan tüm iş yüklerini doğruladığı Visual Studio kurulumunun günlük akışına bakıyorsunuz.

13:26:26 Komut İstemi penceresinin içine tıkladım. Ekran çıktısı, "İşaretleme modu" ndan çıkmak için Enter tuşuna bastığımda 14:09:03 tarihine kadar durur.

Şimdi 13: 26: 26'dan sonra, işlemin x86-23_r20.zip hashını kontrol etmeyi bitirdiğini, " başarılı oldu. Hash: X " mesajının kontrol edildiğini ve 14 : 09:03'te " BEGIN: Verifying" mesajını başka bir dosya ile yeniden başlattığını fark edin. [..] AndroidSDKPrivateInstall.ps1 "

Duraklatma sırasında Visual Studio Kur Komut Satırı Yardımcı Programı, işlenen dosyanın doğrulanmasını tamamladı ve kontrolün konsola geri gönderileceği tam zamanında yeni bir karma kontrol çalışması başlattı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.