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


11

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

回答:


13

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

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

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


5
また、bashにも違いがあります。ctrl + dを押すと、バックグラウンドで&実行されているプロセスは実行されたままになります。「X」の場合、それらは終了します。
Patrick

3
@Patrickこれはシェルではなく端末エミュレーターに依存しているようです。エミュレータが明示的にバックグラウンドプロセスを強制終了しない限り、私が知っている限り、bashはどのように終了してもSIGHUPを送信しません。私はこれをMac OS X 10.7.3で試しました。ターミナルはバックグラウンドプロセスを強制終了しませんが、Xterm(X11で実行中)は強制終了します。それがXtermの動作なのか、X11の一般的な動作なのかはわかりません。
Chris Page

@jofelこれは真実ではありません。私の答えを参照してください。
Patrick

@Patrickこれを指摘してくれてありがとう。回答を編集または削除します。
jofel 2012

@jofel nah、削除しないでください。zsh情報は引き続き役立ちます。私はzshの初心者なので、コメントはできません。しかし、それは良い点をもたらすので、私は私の答えを編集して、異なるシェルは異なる動作をすることができ、OPは彼のシェルを指定しませんが、私が説明したデフォルトの動作はbashに依存することに注意してください。
Patrick

4

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

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

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

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

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


この動作は完全にシェルに依存しています。シェルによってデフォルトの動作が異なる可能性があります。


Ctrl+dプロセスがPPID 1 = systemdによって継承される場合
EdiD '12年

1

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

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

はい、CTRL+Dexit同じですが、問題は、ウィンドウを閉じるには、ウィンドウマネージャの「X」をクリック入力しない程度でしたexit:-)
パトリック・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.