ILD

nohup工作原理
作者:Yuan Jianpeng 邮箱:yuanjp89@163.com
发布时间:2020-12-26 站点:Inside Linux Development

nohup是让一个进程忽略SIGHUP信号。语法

1
nohup COMMAND [ARG]


如果标准输入是一个终端,那么标准输入被重定向到一个unreadable file。

如果标准输出是一个终端,那么输出被追加到nohup.out。

如果标准错误是一个终端,那么背重定向到标准输出。

为了保存输出到一个文件,可以使用 nohup COMMAND > FILE


通过strace命令,查看nohup发生了啥,其实使用ltrace查看,更简单,nohup屏蔽了SIGHUP信号。然后execv用新进程替换了自己。根据参考1中的信息:

POSIX specifies that for execve signals whose handlers are either SIG_IGN or SIG_DFL are left unchanged: that is, an ignored signal is still ignored after an execve

被忽略的信号,是可以继承。


ltrace只支持lazy bind。对于-z now编译的不支持。


参考

[1] https://github.com/golang/go/issues/20479

[2] https://stackoverflow.com/questions/43213505/no-output-when-running-ltrace

[3] https://bugzilla.redhat.com/show_bug.cgi?id=1333481



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.