nohup如何工作?


8

我的理解是,为了阻止类似的过程信号SIGHUP,您需要在将信号发送到的过程中进行操作。但是,像这样的Unix shell bash可以HUP使用nohup命令生成一个子进程并从父进程中阻止该子进程的信号。这是如何运作的?是否会nohup阻塞信号然后执行子进程而不进行分叉?那是我唯一能想到的方法。

Answers:


7

你可以看看的实现的源代码nohup GNU的coreutils版本。有大量的设置,其中一些用于国际化,其余用于处理各种重定向选项。然后发生实际的“ nohupping”:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

如您所料,这将使过程设置为忽略HUP信号,然后exec输入所请求的命令。


-2

使用的行为nohup只是将生成的进程的PPID更改为1(初始值),这样,当shell退出时,它不再是该shell的子进程,因此不会收到HUP。

编辑:有时我应该发表更多思考。把它留在这里让我想起我的耻辱:-(

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.