Windows10のコマンドプロンプトでCtrl+Cの挙動

 Windows10にアップデート後、コマンドプロンプトに向かっていたのだけれど、機能強化された旨の記事を見たことを思い出した。
www.atmarkit.co.jp
 上記の記事で唯一気になっていたのが、Ctrl+Cをはじめとするコピペ系ショートカットが使えるようになったということ。Ctrl+CはWindows以前のピュアなDOS時代から実行中のプログラムを強制終了するための入力であり、Windows時代のコンソールアプリにおいても同様であった。故に、強制終了を意図してCtrl+Cを入力した場合どうなるのかが気になっていた。故に、実験してみた結果を共有する。



実験結果

  • (何も選択せずに)Ctrl+C押下

 実行中のプログラムが終了。従来のコマンドプロンプトと同様の挙動。

  • テキストを選択後Ctrl+C押下

 選択中のテキストがクリップボードにコピーされる。このとき実行中のプログラムは終了しない。但し、Ctrl+C押下後直ちに選択状態はクリアされるので、Ctrl+Cを2回連打すると実行中のプログラムは死んでしまう

考察

 従来同様に簡易編集モードを有効にしておけば、テキストを選択後ENTER押下で選択中テキストがクリップボードにコピーできるため、その方が安全だと想定される。この場合もENTER押下後直ちに選択状態はクリアされるが、ENTERを連打してしまったとしても、入力待ち状態でないプログラムにENTERを喰らわせたところで基本的に何も起きない。

MS公式の解説

 cmd.exeのプロパティからリンクされている[コンソールの新機能の詳細]がMS公式のリファレンスと思われる(当該ページの日本語版は現時点で存在しない)。
f:id:kachine:20160121020306p:plain
What's New in the Windows Console in Windows Server 2016 Technical Preview
 こちらからCtrl+Cの挙動についての説明を引用すると以下の通り。

CTRL+C now serves two functions. If no text is selected when you use it, it sends the BREAK command as usual. If text is selected, the first use copies the text and clears the selection; the second use sends BREAK.

 日本語訳すると、だいたい以下の通り。

Ctrl+Cは今では2つの機能を提供する。
テキストが未選択の場合、通常通りBREAKコマンドを送出する。
テキストが選択されている場合、1回目はテキストをコピーし、選択範囲をクリアする。2回目はBREAKを送出する。

ということで、実験するまでもなく公式な説明が提供されていました。


 Windows10だけではなくWindows Server 2016以降がこの仕様だと思われるので、
「コンソールにスタックトレース吐かれてたんで、調査のためコピーしようと思ったらサーバー殺しちゃいました。」
「お前Ctrl+C連打したやろ。」
みたいな事故が起きないことを願いつつ。




以上。