仅通过单击“X”或使用“ctrl+d”来关闭 shell 是否安全?

tki*_*kit 12 shell security root terminal exit

使用 su 以 root 身份登录时,仅通过单击“X”或使用“ctrl+d”来关闭 shell 是否安全,还是通过键入“exit”关闭它更安全?是否有任何区别(安全方面),还是相同并且您使用哪种方式无关紧要?

jof*_*fel 14

Ctrl-D 还是exit一样的。

如果您使用“X”,窗口管理器会向外壳程序发送一个终止信号。最终结果相同。如果 shell 没有反应,用户通常会收到警告,然后可以强制 shell 结束(等于kill -9 $PID)。

如果您zsh作为 shell使用,“X”- 和退出方法之间有一个小的区别:如果您有一个后台进程正在运行,exit/ctrl-D 第一次只产生一条警告消息“您有正在运行的作业”,第二次关闭外壳。使用“X”按钮,外壳会立即终止,没有任何警告。

  • bash 也有区别。如果你 ctrl+d,那么任何以 `&` 为背景的进程都将继续运行。如果你“X”,那么他们将被终止。 (5认同)
  • @Patrick 这似乎取决于终端模拟器而不是外壳。除非模拟器明确杀死后台进程,据我所知,无论您如何退出,bash 都不会向它们发送 SIGHUP。我刚刚在 Mac OS X 10.7.3 上试过这个。终端不会终止后台进程,但 Xterm(在 X11 中运行)会。我不知道这是 Xterm 的特定行为还是 X11 的一般行为。 (3认同)

phe*_*mer 6

关闭终端模拟器与按下不同CTRL + D(除非huponexit设置了该选项)。

  • 当您关闭终端(单击“X”)时,终端仿真器会向 shell 发送一个 SIGHUP。当 bash 收到 SIGHUP 时,它还会向您的所有作业发送一个 SIGHUP。

  • 当您使用CTRL+Dlogout或退出终端时exit,shell 退出而不向所有作业发送 SIGHUP。这是默认行为,但可以通过设置 bash shoptsetting 进行更改huponexit

因此,最终,如果您的目标是确保后台没有运行任何内容,那么单击“X”是明智之举。

.

jofel 在他的评论中提供的信息不正确(对不起 jofel)。终端模拟器不知道 shell 下正在运行哪些作业,因此无法终止它们。

注意
此行为完全取决于外壳。完全有可能不同的外壳具有不同的默认行为。