根据文档:
为了防止 shell 向特定作业发送 SIGHUP 信号,应该使用 disown 内置函数将其从作业表中删除 或者使用 disown -h 标记为不接收 SIGHUP。
https://www.gnu.org/software/bash/manual/html_node/Signals.html
请注意或者在报价中。
我可以确认,只需使用disown
without-h
并重新记录该进程就不会退出:
#!/bin/bash
( sleep 10s; echo 1 > b ) &
disown
好像这个-h
选项没有必要吧?如果没有它也能工作,那么它的目的是什么?
答案1
如果没有,-h
该作业将从活动作业表中删除,如果没有-h
,则不会。
一切都在手册中:
disown [-ar] [-h] [jobspec ...]
(...)
If the -h option is given, each jobspec is not removed
from the table, but is marked so that SIGHUP is not sent to the
job if the shell receives a SIGHUP.
jobs
要查看使用和不使用 否认工作后运行的差异-h
。