退出终端 vs 关闭终端

退出终端 vs 关闭终端

语境:-

&我在后台模式下运行一个带有附加 ie 的 bash 进程。该进程有一个while(1)ie,它将永远运行。我的 bash 是父进程,我的进程成为子进程。我想了解当父进程终止时内核如何处理子进程。

观察结果:-

  1. 如果我退出终端(使用exit终端命令),则/lib/systemd/systemd --user成为子进程的父进程
  2. 如果我从另一个终端终止终端进程(使用kill),结果与上述相同
  3. 如果我使用十字图标关闭终端,子进程也会终止

问题:-

关闭与杀死/退出有何不同?

答案1

Linux 中有不同类型的信号。当您exit关闭终端时,发送的信号与您通过单击关闭终端时发送的信号不同x。尝试通过终止信号了解关闭和退出终端之间的区别。

答案2

这样启动的进程是终端程序打开的./myprocess &父进程的子进程。该标志不会帮助您在长进程结束之前关闭终端窗口。bash&

您正在寻找的是命令nohup

user@host:~$ nohup bash -c '/path/to/myprocess'

更多信息 : http://manpages.ubuntu.com/manpages/impish/en/man1/nohup.1.html
一些例子: https://linuxhint.com/nohup_command_linux/

答案3

pinggnome-terminal窗口中使用了它,我可以确认你的观察结果。我认为一个进程可以在没有任何通信的地方运行是有问题的。我将尝试解释我注意到的内容(但我并不认为我理解为什么,也许允许具有自己的 GUI 的程序在终端窗口中启动时无需nohup退出即可工作)。bash

  • 当我exit退出bash终端窗口的运行,并ping继续运行,但却无处可写。

  • 当我kill这个过程时,我杀死bash在终端窗口中查看进程。我没有找到gnome-terminal要终止的明确进程,因为该进程/usr/lib/gnome-terminal/gnome-terminal-server会运行所有进程。我不确定这是你正在做的事情,但我猜是这样。

  • 当我关闭窗口(使用 x 按钮)时,我退出窗口进程(这反过来会强制其子进程停止包括bashping)。这与前两种情况有明显的区别。


当我用 做相应的练习时xterm,将会出现一个名为“xterm”的单独进程。

  • 当我exit退出bash终端窗口的运行,并ping继续运行,但却无处可写。

  • 当我kill该进程时,我终止了xterm终端窗口的进程,(这反过来又强制其子进程停止,包括bashping)。

  • 当我关闭窗口(使用 x 按钮)时,我退出窗口进程(这反过来迫使其子进程停止,包括bashping)。


您已经知道,如果您希望在关闭启动子进程的终端窗口后继续运行子进程,则可以使用nohup(与)。&


编辑 1:最终评论:

man bash

如果命令以控制操作符 & 结束,则 shell 将在子 shell 中在后台执行该命令。shell 不会等待命令完成,返回状态为 0。

我们注意到,退出时没有信号停止子 shell 以及在该子 shell 中/从该子 shell 启动的进程bash,至少在终端窗口中运行时没有。但调用终端窗口已关闭。我认为,退出 bash 后,终端窗口不再知道子 shell 以及在该子 shell 中/从该子 shell 启动的进程,因此无法停止它们。

编辑 2:我向Unix 和 Linux - 请阅读答案

相关内容