- ベストアンサー
コンソールウインドウを閉じる方法について
- コマンドプロンプトやPuTTYで作業する際に、ウインドウの[×]ボタンで閉じることがありますが、安全に終了するためにはexitコマンドを使用するべきです。
- exitコマンドで終了する方法とウインドウの[×]ボタンで閉じる方法の結果は常に同じではありません。結果に差が発生することがあります。
- 実行中のプログラムやコマンドを「Ctrl+C]等で停止した後、exitコマンドで終了する方法とウインドウの[×]ボタンで閉じる方法の結果は常に同じではありません。結果に差が発生することがあります。
- みんなの回答 (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シグナルを受けたときの動きが同じかどうかはコマンドのプログラムの作りによりますが、プログラム中で何も指定しないと同じ(プログラム終了)です。
その他の回答 (1)
- ya9pon
- ベストアンサー率34% (88/254)
処理の終わっているアプリの窓をどう閉じようが無問題で、障害が出る事由がみつからない。 この場合、気にする方に問題があると思われます。
お礼
「処理の終わっている」と状況を限定をしていらっしゃるので質問1に対してのみのご回答ということですよね。 そして質問1に対して「結果は常に同じ」という趣旨のご回答ですよね。 ありがとうございました。
補足
私も質問1はまず問題ないだろうと思っていました。どちらかというと質問2の方がより知りたいと思っています。 「問題ない場合もある」という事よりも、「問題が発生するケースがありうるのか、存在し得ないのか」という点の方が気になります。 そういう点についてもしお分かりになるようでしたら、追加でご回答お願いします。よろしくお願いします。
お礼
.bash_logoutは動作を確認しました。これは明快ですね。 あとシグナルも違うのですね。シグナルについてはtrapコマンド入りのシェルを作って確認しました。ただ、こちらを十分に理解するには各コマンドがシグナルを受け取ったときの振舞いをきちんと把握する必要がありますね。精進します。 違いがあることが分かり大変すっきりしました。細かい事を気にして質問をしてみてよかったです。 いままでテキトーに使うだけだったので支障はありませんでしたが、場合によっては問題がおきかねないので理解を深めた方がよさそうですね。 大変参考になりました。ありがとうございました。
補足
>「exitで終了できないとき」というのがどういうときなのか不明。 >コマンド実行中ということですか? はいそうです。フォアグランドで実行中であり、コマンド入力ができない状態の事をさしたつもりです。