web-dev-qa-db-ja.com

「X」をクリックするか「ctrl + d」を使用するだけでシェルを閉じるのは安全ですか?

Rootとしてsuでログインしているときに「X」をクリックするか「ctrl + d」を使用してシェルを閉じるのは安全ですか、それとも「exit」と入力して閉じるのが安全ですか? (セキュリティに関して)何か違いはありますか、それとも同じであり、どのように使用しても問題ありませんか?

11
pootzko

Ctrl-Dまたはexitは同じです。

「X」を使用する場合、ウィンドウマネージャーは終了信号をシェルに送信します。最終的には同じ結果になります。シェルが反応しない場合、ユーザーは通常警告を受け取り、シェルを強制的に終了できます(kill -9 $PIDと同じ)。

シェルとしてzshを使用している場合、「X」メソッドとexitメソッドには小さな違いが1つあります。バックグラウンドプロセスを実行している場合、exit/ctrl-Dが最初に生成されます。シェルが2回目に閉じられたときは、「実行中のジョブがあります」という警告メッセージのみが表示されます。 「X」ボタンを使用すると、シェルは警告なしにすぐに終了します。

13
jofel

ターミナルエミュレータを閉じることは、CTRL + Dを押すことと同じではありません(オプションhuponexitが設定されている場合を除く)。

  • ターミナルを閉じると(「X」をクリック)、ターミナルエミュレータはSIGHUPをシェルに送信します。 bashがSIGHUPを受信すると、すべてのジョブにSIGHUPも送信します。

  • CTRL+Dまたはlogoutまたはexitを使用してターミナルを終了すると、シェルはすべてのジョブにSIGHUPを送信せずに終了します。これはデフォルトの動作ですが、bash shopt設定huponexitを設定することで変更できます。

したがって、最終的に、バックグラウンドで何も実行されていないことを確認することが目的の場合は、「X」をクリックする必要があります。

Jofelがコメントで提供した情報は正しくありません(申し訳ありませんがjofel)。ターミナルエミュレータは、シェルで実行されているジョブの手がかりがないため、それらを終了できません。

[〜#〜] note [〜#〜]
この動作はシェルに完全に依存しています。シェルが異なれば、デフォルトの動作も異なる可能性があります。

4
Patrick

違いはありません。 ^ Dを押すと、「exit」と入力するのと同じことをしていることになります。

$ su -
Password:
# [press ^D]
logout
1
Renan