コンソールウインドウを閉じる方法について

このQ&Aのポイント
  • コマンドプロンプトやPuTTYで作業する際に、ウインドウの[×]ボタンで閉じることがありますが、安全に終了するためにはexitコマンドを使用するべきです。
  • exitコマンドで終了する方法とウインドウの[×]ボタンで閉じる方法の結果は常に同じではありません。結果に差が発生することがあります。
  • 実行中のプログラムやコマンドを「Ctrl+C]等で停止した後、exitコマンドで終了する方法とウインドウの[×]ボタンで閉じる方法の結果は常に同じではありません。結果に差が発生することがあります。
回答を見る
  • ベストアンサー

コンソールウインドウの[×]ボタンで閉じる

コマンドプロンプトやPuTTYで作業しているときに、ついウインドウの[×]ボタンで閉じてしまう事があります。でもなんだか、exitコマンドで終了する方が、安全に終了できる気がします。(根拠はありませんが個人的なイメージです) 質問1 (exitコマンドで終了できる状態のとき) 「exitコマンドで終了する」のと「ウインドウの[×]ボタンで閉じる」は結果は常に同じでしょうか?結果に差が発生する事はあるのでしょうか? 質問2 (exitコマンドで終了できない状態のとき) 『実行中のプログラムやコマンドを「Ctrl+C]等で停止した後、exitコマンドで終了する』のと「ウインドウの[×]ボタンで閉じる」は結果は常に同じでしょうか?結果に差が発生する事はあるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

質問1: 差はあります。 exitだとシェルが正常に終了。このとき、バックグラウンドで動いているジョブがあれば動き続けます。ctrl-Zで中断中のジョブがあれば終了される(SIGTERMシグナルが送られる)。 ウィンドウを閉じると、シェルはSIGHUPシグナルで終了します。すべてのバックグラウンドジョブにもSIGHUPが送られ普通はそれらも終了します。 またログインシェルの場合は、exitだと ~/.bash_logout が実行されますが、ウィンドウを閉じると実行されません。 コンソールからGUIでログインしてメニューから開いたような端末だと普通はログインシェルじゃなくて、WindowsPCからPuTTYでつないだような場合だと普通はログインシェルです。 つまり、~/.bash_logoutが無いか空で、バックグラウンドで実行中のジョブも無ければ、実質的には同じです。 質問2: 「exitで終了できないとき」というのがどういうときなのか不明。コマンド実行中ということですか? ctrl-C でコマンド終了させた後は、質問1で書いたことが適用されます。 ctrl-C を押さずコマンド実行中のままウィンドウを閉じると、その実行中のコマンドにSIGHUPシグナルが送られ、そのコマンドは普通は終了します。それ以外については質問1で書いたことと同じ。 ctrl-C つまり SIGINTシグナルと、SIGHUPシグナルを受けたときの動きが同じかどうかはコマンドのプログラムの作りによりますが、プログラム中で何も指定しないと同じ(プログラム終了)です。

pringlez
質問者

お礼

.bash_logoutは動作を確認しました。これは明快ですね。 あとシグナルも違うのですね。シグナルについてはtrapコマンド入りのシェルを作って確認しました。ただ、こちらを十分に理解するには各コマンドがシグナルを受け取ったときの振舞いをきちんと把握する必要がありますね。精進します。 違いがあることが分かり大変すっきりしました。細かい事を気にして質問をしてみてよかったです。 いままでテキトーに使うだけだったので支障はありませんでしたが、場合によっては問題がおきかねないので理解を深めた方がよさそうですね。 大変参考になりました。ありがとうございました。

pringlez
質問者

補足

>「exitで終了できないとき」というのがどういうときなのか不明。 >コマンド実行中ということですか? はいそうです。フォアグランドで実行中であり、コマンド入力ができない状態の事をさしたつもりです。

その他の回答 (1)

  • ya9pon
  • ベストアンサー率34% (88/254)
回答No.1

処理の終わっているアプリの窓をどう閉じようが無問題で、障害が出る事由がみつからない。 この場合、気にする方に問題があると思われます。

pringlez
質問者

お礼

「処理の終わっている」と状況を限定をしていらっしゃるので質問1に対してのみのご回答ということですよね。 そして質問1に対して「結果は常に同じ」という趣旨のご回答ですよね。 ありがとうございました。

pringlez
質問者

補足

私も質問1はまず問題ないだろうと思っていました。どちらかというと質問2の方がより知りたいと思っています。 「問題ない場合もある」という事よりも、「問題が発生するケースがありうるのか、存在し得ないのか」という点の方が気になります。 そういう点についてもしお分かりになるようでしたら、追加でご回答お願いします。よろしくお願いします。

関連するQ&A

  • VC、コンソールアプリ結果のウインドウサイズ

    OSはwindows2000proSP2、VC6スタンダードで コンソールアプリケーションを作っています。 アプリを実行すると、結果がコマンドプロンプトに出てきますが、 コマンドプロンプトのウインドウサイズ幅が小さく、 変なところで折り返って表示されてしまい、見栄えが悪くなってしまいます。 そこで、実行結果が出力されるコマンドプロンプトのウインドウサイズを 変更したいのですが、どう設定したらよいかわかりません。 どうしたらウインドウサイズを変更できるのでしょうか?

  • コマンドプロンプト画面の閉じるボタン非表示

    Windows端末でバッチファイルを実行後、処理経過が分かるようにコマンドプロンプト画面を表示しているのですが、途中で画面右上の「×」(閉じる)ボタンが押されて処理が強制終了されないようにしたいと考えています。 コマンドプロンプト画面右上の「×」(ボタン)を非表示にする方法はありますでしょうか?

  • Windows PEの閉じ方の質問です。

    Windows PEの閉じ方の質問です。 Windows PEを終わるには、WpeUtil コマンドで終えなければならない、Exitや画面右上の X は、絶対に使ってはいけない。と書かれたホームページも有ります。 私は、常に Exit コマンドで終わっていますが、被害経験はありません。 Exit で被害を経験された方が有れば、お聞かせください。

  • Windowsのrubyで強制終了させない方法

    表題の通りで、Windowsのrubyでコマンドプロンプト から簡単なプログラムを書いて、 最後に勝手に閉じてしまうと思うのですが、 標準入力を待つ、又は何か入力が有れば終了させるのは、 どう書いたら良いのでしょうか? 初歩的な質問で申し訳ありません。 perlだと、 <>; exit; でOKと思いますが、 rubyの場合は??宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • Windows VistaからWindows 7へアップグレード

    Windows VistaからWindows 7へアップグレード Windows VistaからWindows 7へアップグレードインストール中に「Windowsのアップグレード中」の画面で5項目が正常に終了したと思ったら「ドライバーがないので中止・・・・(早くて正確には読めなかった)・・・」と出ると直ぐにコマンドプロンプト画面に切り替わった。 「winpeshl.iniファイルは存在するがコマンドは一つも正常に開始されませんでした。構文が正しくないか、または実行可能なファイル名が無効なことが原因と考えられる。」と表示され次のコマンドラインが表示される。  X:¥$Windows.~BT¥Windows¥system32> 意味不明なのでとりあえず「exit」とインプットすると自動的に再起動して再び新たなコマンドプロンプト画面が出る。セーフモード画面に似ているが一行目は「Windows 7・・・・・」、二行目に「Windows Vistaにロールバック・・・」の表示が有りその為矢印キーを押して二行目を選択しようするが矢印キーが全然効かずアット言う間に先ほどの「winpeshl.ini・・・・・・・」のコマンドプロンプト画面に戻る状態です。矢印キーの代わりにTabキーを押しても全然効かず同じ状態です。 まず何とかコマンドプロンプト画面でキーが動けばと思っていますがどなたか回避法を教えて下さい。 併せてこの現象の原因と対処法も御存知の方は教えて下さい。 尚、自作のデスクトップでWindows Vistaで約一年問題なく使っているマシンです。

  • 回復コンソールに複数入る方法

    教えて頂きたいことがございます。 「次のファイルが存在しないかまたは壊れているため、Windowsを起動できませんでした:System32\Drivers\Ntfs.sys オリジナルセットアップCD-ROMからWindowsセットアップを起動して このファイルを修復できます。」 というエラーが出てしまうようになったため、 FD6枚をつかって起動ディスクを作成しました。 順番に読み込んで行き、コマンドプロンプト(回復コンソール? )の画面までたどり着いたのですが、その時誤ってexitしてしまい、コマンドを打たずに終了してしまいました。 その後色々と調べていると、コマンドの入力方法もわかったため 再度その画面にしたいと思ったのですが、 また起動すれば最初と同じエラーメッセージが出てしまいます。 コマンド入力の画面にはもう戻れないのでしょうか? 1度PCを落とし、再度FDを読み込ませてしまったら、 その後は6枚目のFDを読み込むとエラーメッセージが出てしまうようになり、コマンド入力画面に辿り着きません。 もう1歩だったのに…ととても悔しいです。 ぜひアドバイスお願いします。

  • Windows11 シャットダウン

    Windows11 Sモードを初期化して最初の設定画面で電源を切りたいのですが、 調べると「Shiftキー」+「F10」を押すとコマンドプロンプト画面に切り替わり「shutdown /s /t 0」を入力する方法があったのですが、 この後また電源を入れると設定画面が表示されるということですか? コマンドプロンプトではなく電源ボタンを長押しで強制終了でも同じですか? これはWindows11ならPCがどこのメーカーでも同じですか? よろしくお願いします。

  • Windowsが起動しない、回復コンソールができない。

    はじめまして、こんばんは。 NECのノートPC、Lavie LL7305D、WindowsXP HomeEdition SP1を使用しています。 スタートボタンから電源を切らず、電源ボタンから終了してしまい、 その後立ち上げた所、下記のメッセージが出ました。 「ご迷惑をかけております。Windowsが正しく開始できませんでした。最近のハードウェアまたは~~~原因不明の場合は、通常起動を選択してください。  セーフモード  セーフモードとネットワーク  セーフモードとコマンドプロンプト  前回正常起動時の構成(正しく動作した最新の設定)  Windowsを通常起動する 上矢印キーと下矢印キーを使って項目を選択し、Enterキーを押してください。」 5つの選択肢をすべて試みましたが、すべてまたこの画面になります。 リカバリCDやセットアップCDはありません。 なので、別PCでマイクロソフトのサイトから、XPのインストール用起動ディスクをフロッピーディスク6枚使って作りました。 その後、この6枚を入れていきセットアップ開始の画面になり、回復コンソールを使うためにR=修復ボタンを押したら、下記のメッセージが出ました。  Microsoft Windows XP(TM) 回復コンソール。 回復コンソールはシステムの修復と回復機能を提供します。 EXIT と入力すると、回復コンソールを終了し、コンピュータを再起動します。 C:\> こうなってしまい、この先のWindowsインストール番号の入力やAdministratorアカウントのパスワードを入力画面が出てきません。 何が原因なのでしょうか。教えて下さい。宜しくお願いします。

  • WindowsでEOF

    簡単な質問で恐縮ですが、現在WindowsでVC++2010Expressでコードを書いています。 そこで、以下の様な入力文字数を返すコードを書いているのですが、コマンドプロンプト上でCtrl+Z(Ctrl+Dも試した)を押してもストップしてくれません。(コマンドプロンプト上に「^Z(^D)」と表示されるだけです。 どなたか教えて頂けませんでしょうか? #include <stdio.h> int main() { int strText; int counter=0; while( (strText=getchar() ) != EOF){ ++counter; } putchar(counter); return 0; }

  • バッチフィルで起動した別ウインドウを閉じるには

    バッチファイルの中から別のコマンドプロンプトを起動して そこでコマンドを実行した後、この別起動したコマンドプロンプト のウインドウを閉じるにはどのようにすればよいでしょうか。 例えば、以下のバッチファイルを コマンドプロンプト(ウインドウ1)から実行すると もうひとつ別のコマンドプロンプト(ウインドウ2)が 起動してcopyコマンドが実行されますが 何分かしてコピーが終了して ウインドウ2はコマンド待ちの状態になりますが ウインドウ2は開いたままです。 この後、別のコマンドプロンプトを起動して 別の処理を行わせたいのですが その数だけ別ウインドウが表示されてしまいます。 ウインドウ2の処理が終わったらウインドウ2を閉じるには どのようにすればよいでしょうか。 (Windows7) ---test.bat------------ start copy /b c:\test1\test.exe c:\test2 -------------------------