当执行 Linux 指令时, 会在终端机一直执行, 直到指令完成后才会结束, 并给使用者重新输入指令。而 nohup 指令就可以让指令在背景执行, 不会影响使用者的正常工作。例如要将一些体积较大的档案 rsync 到远端服务器, 用 nohup 指令便可以一边 rsync 一边完成手边的工作。
有关 nohup
nohup 的全写是 “no hangup”, HUP hangup (HUP) 讯号会在使用者登出时, 系统向 process 发出, 通知 process 结束, 但透过 nohup 执行的指令, nohup 会将 HUP 讯息截取, 让指令可以继续执行。
nohup 使用方法
nohup 的使用方法十分简单, 只要在 nohup 后面加上要执行的指定, 然后再加上一个背景执行的 “&” 字符, 例如:
$ nohup your-command &
nohup 默认会将指令的输出放到 nohup.out 的档案, 如果需要自订重新导向的档案, 可以用以下方法将输出重新导向到档案, 例如:
$ nohup your-domain > nohup.log 2>&1 &
这样就会将指令的输出放到 nohup.log 内。
查看及终止 nohup
由于 nohup 将指令放到背景执行, 要查看或终止 nohup 便要先取得 nohup 执行指令的 pid, 再用 kill 掉:
查看 nohup 执行的指令:
$ jobs -l
输出的结果第二栏是 pid, 最后一栏是 nohup 及执行的指令, 将要终止执行的 pid 记下, 再用 kill 指令终止 nohup 执行, 例如 pid 是 12345:
$ kill -9 12345