我只是想知道,例如当我启动时qtox
:
qtox &
然后关闭终端,qtox
关闭它。但是当etherape
使用以下命令运行时:
sudo etherape &
关闭终端不会关闭或导致 Etherape 出现任何问题。不同的应用程序有不同的行为,有些在终端关闭时关闭,有些则不关闭,这是为什么?为什么有些关闭而其他的不关闭?我正在运行带有 GNOME 3.18 的 Ubuntu GNOME 15.10。
答案1
当你关闭终端时,终端会向 shell 发送 SIGHUP 信号;而 shell 则会向其所有子进程组(包括后台进程组)发送 SIGHUP 信号;
每个进程如何对信号作出反应完全取决于进程本身:如果进程没有定义信号处理程序并告知内核(通过某些系统调用,如signal()
或者sigaction()
) 时,内核将执行该信号的默认处理程序,在 SIGHUP 信号的情况下,该默认处理程序将终止该进程。
但是,当您使用 运行命令时,进程及其子进程sudo
的 UID会设置为(root);通常,除非发送信号的进程的 UID 是(root) 或与目标进程相同,否则内核会忽略该信号(即:进程不能向另一个用户拥有的进程发送信号,除非发送信号的进程由 root 拥有);这就是为什么用户运行的进程(例如终端运行的 Bash 实例)无法 SIGHUP 进程,并且最终关闭终端不会影响以 启动的进程。sudo
0
0
sudo
sudo