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


11

使用su以root身份登录时,仅单击“ X”或使用“ ctrl + d”来关闭外壳程序是否安全?或者通过键入“退出”来关闭外壳程序是否更安全?(在安全方面)根本没有区别吗?还是相同,并且使用哪种方式都没有关系?

Answers:


13

Ctrl-D还是exit一样。

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

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


5
bash也有区别。如果您按ctrl + d,则所有具有后台功能的进程&将保持运行状态。如果您选择“ X”,则它们将被终止。
Patrick

3
@Patrick这似乎取决于终端仿真器而不是shell。据我所知,除非模拟器明确杀死所有后台进程,否则无论您如何退出,bash都不会将它们发送给SIGHUP。我只是在Mac OS X 10.7.3上尝试过。Terminal不会杀死后台进程,但是Xterm(在X11中运行)可以杀死后台进程。我不知道这是Xterm还是X11的普遍行为。
克里斯·佩奇

@jofel这不是真的,请参阅我的答案。
Patrick

@Patrick感谢您指出这一点。我将编辑或删除答案。
jofel 2012年

@jofel nah,不要删除,zsh信息仍然有用。我只是zsh的菜鸟,所以我不能在那发表评论。但这确实带来了一个好处,所以我编辑了我的答案,以注意不同的shell可能表现不同,并且我描述的默认行为是bash依赖的,而OP没有指定他的shell。
Patrick

4

关闭终端仿真器不同于按CTRL + D(除非huponexit设置了该选项)。

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

  • 当您使用CTRL+Dlogout或退出终端时exit,外壳程序将退出,而不会将SIGHUP发送给所有作业。这是默认行为,但是可以通过设置bash shopt设置 来更改huponexit

因此,最终,如果您的目标是确保后台没有任何运行,请单击“ X”。

jofel在其评论中提供的信息不正确(对不起jofel)。终端仿真器不知道外壳下正在运行什么作业,因此无法终止它们。

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


Ctrl+d进程由PPID继承时1 = systemd
EdiD

1

没有区别。如此之多,当您按^ D时,您所做的与输入'exit'相同:

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

是的,CTRL+D并且exit是一样的,问题是有关单击窗口管理器的“ X”以关闭窗口,而不是输入exit:-)
Patrick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.