【问题标题】:gnome-terminal cmd leaving processes open after closing parent window关闭父窗口后,gnome-terminal cmd 使进程保持打开状态
【发布时间】:2013-08-01 19:16:08
【问题描述】:

下面的简单命令应该可以证明我的问题:

gnome-terminal --tab -t "Tab 1" -e "/bin/bash" --tab -t "Tab 2" -e "/bin/bash"

这应该会打开一个带有两个选项卡和一个活动 bash shell 的新窗口。如果我立即使用 GUI [x] 关闭这个新窗口,然后执行 ps 命令,一个(在这种情况下)子进程 (/bin/bash) 将保持打开状态。我发现这对应于在某个时间点从未激活(通过单击它们)的所有非活动选项卡。因此,如果我们制作了一个类似于上面示例的新命令,但使用 5 个选项卡而不是 2 个选项卡,并且您在运行该命令后立即关闭此窗口,则 4 个子进程将继续运行。这是特殊的部分...如果您单击每个选项卡以使其处于活动状态,然后关闭窗口,所有子进程都将被杀死,正如人们所期望的那样。

这是 gnome-terminal 中的错误吗?

如何确保这些进程已关闭而不是保持打开状态?

【问题讨论】:

  • unix.stackexchange.com 会更好
  • 子进程处于什么状态?他们是僵尸吗?无论哪种方式,这听起来确实像是 gnome-terminal 中的一个错误。
  • 我不认为他们是僵尸。我必须承认——对于 ps 命令和一般的 unix,我有点新手。我在 STAT 列中没有看到“Z”。似乎保持打开状态的进程的父进程 ID 是执行上述命令的终端的 PID。我希望关闭新生成的窗口足以杀死与每个选项卡对应的子进程(无论它是否已被激活),而不必杀死原始的源终端。希望这是有道理的。

标签: bash shell process gnome


【解决方案1】:

运行如下:

gnome-terminal --tab -t "Tab 1" -e "bash -ic 'echo Hello; exec bash'" --tab -t "Tab 2" -e "bash -ic 'echo Hello; exec bash'"

您需要在 ;bash 之前运行一些命令,然后您可以通过任何其他命令更改“echo Hello”。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2013-05-10
    • 2014-01-31
    相关资源
    最近更新 更多