【参开文章】:nohup 与 & 的区别
1. nohup
1.1 基本概念
将程序以忽略挂起信号的方式运行起来;
不可以免疫 Ctrl + C 的 SIGINT 中断信号;
可以免疫 SIGHUP 的 挂断信号;
测试:
查看启动脚本,两个启动方式只是日志打印的文件不一样,命令执行效果一样;
程序启动后卡在这里,如图;
重新打开一个终端,查看程序是否启动:
然后在启动程序的终端执行 Ctrl + C ;
再次查看程序启动情况,发现进程已被终止;
被运行的程序的输出信息将不会显示到终端。
nohup 命令的如果没有重定向输出时,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out
文件中。如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。
如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
1.2 重定向
将执行命令的输出信息重定向到srart.log文件中;
nohup command > start.log 2>&1
2. &
2.1 基本概念
在当前终端后台运行命令;
可以免疫 Ctrl + C 的中断信号;
不可以免疫 SIGHUP 的 挂断信号;
当前用户退出、挂断或者ssh连接断开的时候,命令也会自动退出;
2.2 用法
command &
使用该方式执行命令的时候:
命令执行时的输出信息会打印到控制台,输出信息打印完成之前不能被其他命令中断,信息打印完成后可以通过 Ctrl + C 切换到命令模式,程序在后台继续运行;
示例:
3. 常用使用方式
3.1 nohup 和 & 配合一起使用
将执行命令的输出信息重定向到srart.log文件中;
nohup command > start.log 2>&1 &
示例:
脚本执行后:
当前终端依然处于命令模式,
程序进入后台执行;
程序执行时的输出信息打印到指定的文件中;