Can I safely assume my processes won't end if I don't use nohup
Não. Se o terminal desligar e tiver um shell interativo como líder de sessão, o shell receberá um SIGHUP e o reenviará para seus trabalhos que não foram renegados.
Se o shell sair voluntariamente, ele enviará SIGHUP para seus trabalhos se a opção huponexit
estiver ativada.
Se o shell sair voluntariamente e houver trabalhos de propriedade parados, o bash os eliminará com SIGTERM (não tenho certeza se isso é um comportamento padrão).
Se o shell sair voluntariamente e houver trabalhos deserdados que estão parados, o driver do terminal os eliminará com SIGHUP (isto é, definitivamente, obrigatório pelo mandado).
Você ainda pode ser morto com o SIGHUP em vários cenários.
Dito isso, ao analisar um código-fonte nohup no link , parece mais ou menos factível em shell puro:
nohup_sh()
(
set -e
if [ -t 1]; then
exec >> nohup.out || exec >> "$HOME/nohup.out"
fi
if [ -t 0 ]; then
exec 0</dev/null
fi
if [ -t 2 ]; then
exec 2>&1
fi
trap '' HUP #ignore SIGHUP (inheritable)
set -m || : #to prevent SIGINT and SIGQUIT from being ignored
#(probably not needed, but the nohup binary won't ignore them, unlike
# & without set -m)
command "$@" &
)
Você pode não precisar do material extra fora de trap '' HUP
, embora o trabalho tenha SIGPIPE se tentar gravar em um terminal desconectado (que é o que os redirecionamentos evitam).