在没有正确退出应用程序的情况下关闭终端窗口是否有害?


18

使用Ubuntu 12.04 LTS,我的问题是,如果我在终端窗口中启动应用程序,那么关闭终端窗口而不先退出应用程序就没有什么坏处了。例如,我使用MATLAB。我打开一个终端并输入

matlab -nodisplay -nodesktop -nosplash

然后运行一堆脚本。那我可以

exit

结束MATLAB,然后关闭终端窗口或仅关闭终端窗口。这两种方法的真正区别是什么?第二种方法会以某种方式“伤害”任何东西吗?第一种方法优先吗?为什么?

Answers:


22

通常,以这种方式这样做应该没问题。

当您单击“ X”以关闭终端窗口时,即从桌面(GNOME,KDE等)向终端应用程序发送“信号”,并告知其自身关闭。由于您在此Shell中运行MATLAB,因此将其视为终端应用程序的子进程。

因此,成为父进程的部分责任是,您又将同样的“信号”发送给您的孩子。

现在,如果您从概念上理解了我刚刚解释的内容,那么我们可以替代更多的实际术语。

信号

首先带有“信号”,实际上,您可以发送给Unix进程的一整套不同的信号。为了保持它的简单有4个,你会经常看到,SIGHUPSIGTERMSIGINT,和SIGKILL

  • 西格普

    当SIGHUP信号的控制端子关闭时,它会发送到进程。它最初旨在通知串行线掉线的过程。在现代系统中,此信号通常意味着控制伪或虚拟终端已关闭。

  • 信号

    SIGTERM信号是用于导致程序终止的通用信号。与SIGKILL不同,此信号可以被阻止,处理和忽略。这是礼貌地要求程序终止的正常方法。

  • SIGINT

    当用户键入INTR字符(通常为Cc)时,将发送SIGINT(“程序中断”)信号。

  • 杀人狂

    SIGKILL信号用于立即终止程序。它不能被处理或忽略,因此总是致命的。也不可能阻塞该信号。

注意: SIGINT当您在运行中使用Ctrl+ C从命令行“破坏”程序时,将发送该消息。

哪个正在使用?

最有可能SIGTERM是您的窗口环境正在调用并将其传递到您的终端。然后,您的终端很可能会发送SIGHUP到MATLAB。该信号使所有进程都有机会自己进行任何本地清理(关闭文件,结束进程等)。

杀死命令

您可以使用命名错误的命令自己发送信号kill。因此,将SIGTERM信号发送到您的终端或SIGHUP to MATLAB, you could determine their PID usingps`,然后运行以下命令向他们发送信号:

$ kill -SIGTERM <PID>

或这个:

$ kill -SIGHUP <PID>

您可以使用以下命令获取信号的完整列表:

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...

注意信号有数字吗?您经常会看到它们像这样使用而不是按名称显示:

$ kill -15 <PID>

或臭名昭著的-9,它可以杀死几乎所有进程。


我一直认为这些数字是负数,但实际上它们是命令行参数。我学到了新的东西:D
Thomas Thomas

1
HUP-HangUP-是在您“松开”终端的线路时发送的信号,例如,您已通过调制解调器连接到Unix服务器。这可能是终止进程的最“温和”的信号。大多数守护程序不会退出,而是在HUP上重新读取其配置文件。命令nohup允许您在外壳关闭后让后台进程继续。屏幕之类的命令在挂断后仍然存在,并将其中的命令与HUP隔离开。
巴德·科珀罗德

@BaardKopperud-谢谢,我有意将HUP排除在外,不想混淆讨论。
slm

@BaardKopperud-我想指出的是:“ SIGHUP信号在其控制终端关闭时发送到一个进程。它最初旨在通知进程串行线掉落。在现代系统中,此信号通常表示控制伪终端或虚拟终端已关闭。”
slm

@BaardKopperud-我感到内gui,所以我修改了答案以更准确地反映正在发生的事情。谢谢!
slm

2

很有可能,但是根据打开的应用程序,您将丢失数据。例如,如果您打开了文件编辑器,则可能会丢失一些更改,如果您未正确保存并退出它们。如果您担心,请正确注销/退出终端。如果您不喜欢输入exitlogout尝试Ctrl-D


为什么会更好?该应用程序将获取SIGHUP而不是SIGTERM,但是它仍然被信号杀死,因此我不能完全称其为“正确保存并退出”
Michael Mrozek

至于Ctrl-D,这实际上仅适用于命令提示符。
2013年
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.