Linux NOHUP

什么是nohup

nohup 是一个命令启动模式,全称为no hang up ,即以此启动的命令或程序,不会因为用户登出、结束当前session而挂断。

nohup的使用技巧

基础使用

使用方式为nohup mycommand
这种方式使用后,命令将以nohup的方式前台执行,用户无法再操作当前session,只有等到该服务执行完成才可以。

后台运行

上述方式比较鸡肋,你启动一个服务后,自己什么都不能干了。所以一般会加上&,以后台方式执行程序

nohup mycommand &

上述方式执行后,console中一般会输出形如以下的信息,该信息为命令对应进程的id,方便用户基于此id去做一些管理,比如杀掉该程序

[1] 25132

重定向输出文件

nohup启动的命令,默认会将命令的所有输出(普通输出或错误输出),都写入当命令执行的当前路径,或用户的home路径下,名为nohup.out

可以通过i/o重定向,将其输出到你指定路径的指定文件。比如

nohup mycommand > result.log &

当然,你也可以将正常输出和错误输出分开,下述的2代表标准错误输出

nohup mycommand > result.log 2>err.log &

忽略掉标准输入的任何信息

上述以后台执行程序后,但依然拥有当前console的标准输入,如果用户没有登出,而是继续进行一些操作,很可能一些输入被后台运行的程序响应了,从而被hang住。所以为了避免这种情况,可以将nohup运行的程序的标准输入替换成/dev/null,也即,nothing。

nohup mycommand > result.log 2>err.log < /dev/null &

recap最佳实践

综上,最好以如下形式来使用nohup

nohup mycommand > result.log 2>err.log < /dev/null &

参考链接

https://unix.stackexchange.com/questions/230887/what-does-dev-null-mean#:~:text=program <%2Fdev%2Fnull means,the file %2Fdev%2Fnull .
https://linuxize.com/post/linux-nohup-command/
https://en.wikipedia.org/wiki/Nohup
https://www.computerhope.com/unix/unohup.htm

原文地址:https://www.cnblogs.com/niceshot/p/13055385.html