nohup 一般配合 & 来使用,将一个进程标记为后台运行,即使终端退出,也不会被杀死。

本以为 nohup 是一个 shell builtin,但他其实是个 bin 文件。

nohup 的本质是忽略 SIGHUP(1) 信号。因为终端退出时,杀死子进程就是通过发送 SIGHUP 实现的。

因此类似的,可以有几种方法达到类似 nohup 的效果

#!/bin/bash
trap '' HUP INT TERM
exec sleep 100  # sleep 100 进程就不会收到 SIGHUP/SIGINT/SIGTERM 信号。

但是这里只能忽略,不能有别的处理程序,不然 exec 替换进程无法继承之前的信号处理函数。