nohup将其它程序作为参数执行,并且忽略所有的SIGHUP(hangup)信号。SIGHUP信号是当控制终端关闭时会发送给进程的信号量。
如何使用nohup命令
nohup命令语法如下:nohup COMMAND [ARGS]
该命令只接收标准的--help和--version选项。示例如下:
$ nohup mycommand
Output:
nohup: ignoring input and appending output to 'nohup.out'
nohup命令在前台执行mycommand命令然后将命令的输出日志重定向到nohup.out文件中。nohup.out文件会在当前工作目录中被创建,如果执行该命令的用户在当前目录没有写的权限,则会在用户的 home 目录下创建该文件。
如果你登出或者关闭终端,该进程也不会终止。
在后台运行命令
使用nohup在前台执行命令不是非常的便捷,因为在命令完成前你都无法与命令行进行交互。
为了在后台执行命令,可以在命令后拼接&符号:
$ nohup mycommand &
输出内容包括 shell job ID(被方括号包裹)和进程 ID:
[1] 25177
可以使用 job ID 通过fg命令将上述命令带回到前台执行。
可以使用kill命令加进程 ID 终止该命令:
$ kill -9 25177
重定向输出到指定文件
默认情况下,nohup将命令输出写到nohup.out文件中,如果你想将输出重定向到其它文件中,可以使用标准 shell 重定向。
比如,如果你想将标准输出和标准错误全部重定向到mycommand.out文件中,应该写成:
$ nohup mycommand > mycommand.out 2>&1 &
如果想将标准输出和标准错误重定向到不同的文件中,可以写成:
$ nohup mycommand > mycommand.out 2> mycommand.err &
总结
当你登出或退出终端时,nohup可以防止命令被终止。