1.nohup
用途:不挂断地运行命令。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
语法:nohup Command [ Arg … ] [ & ]
- 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
- 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
- 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回状态如下
- 126 可以查找但不能调用 Command 参数指定的命令。
- 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
- 除此之外,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
2.&
用途:在后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出
3.nohup与&一起使用
nohup与&合在一起会让命令永久的在后台执行
语法:nohup COMMAND &
eg: nohup command > myout.file 2>&1 &
其中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ,在该例中 2>&1是将标准错误重定向到标准输出,标准输出再被重定向输入到myout.file文件中。
4.测试
测试文件 mylog.sh
1 #!/bin/bash 2 3 index=0 4 while [ 1 ] 5 do 6 echo mylog $index 7 index=$[ index+1 ] 8 sleep 1s 9 done
测试四种情况:
执行命令 | 状态 |
./mylog.sh | 结果会输出到终端 使用Ctrl + C发送SIGINT信号或关闭session发送SIGHUP信号,程序关闭 |
./mylog.sh & | 结果会输出到终端 使用Ctrl + C发送SIGINT信号,程序免疫 关闭session发送SIGHUP信号,程序关闭 |
nohup ./mylog.sh | 结果默认会输出到nohup.out 使用Ctrl + C发送SIGINT信号,程序关闭 关闭session发送SIGHUP信号,程序免疫 |
nohup ./mylog.sh & | 同时免疫SIGINT和SIGHUP信号 |
测试过程
1.使用./mylog.sh
2.使用./mylog.sh &
使用ctrl+c发送SIGINT信号,程序免疫
关闭终端窗口,查看程序,程序关闭
3.使用nohup ./mylog.sh
使用ctrl+c,程序关闭,输出信息被保存到当前目录nohup.out文件中
关闭终端窗口,查看程序,程序免疫
4.使用nohup ./mylog.sh &
使用ctrl+c,程序免疫
关闭终端窗口,程序免疫
只有通过kill杀掉进程
总结
&是把你执行的命令放在后台执行,使用ctrl+c也终止不了这个命令的执行,除非是kill进程或者关闭窗口,才会终止这个命令
使用nohup会将命令的输出重定向到nohup.out文件中,使用ctr+c可以终止该命令的执行,关闭窗口不能
一般使用nohup you_command $ ,这样命令的输出会被保存到nohup.out中,除了你执行命令的机器出问题,其他相关的出问题都不会影响你的执行
常用任务管理命令
# jobs //查看任务,返回任务编号n和进程号
# bg %n //将编号为n的任务转后台运行
# fg %n //将编号为n的任务转前台运行
# ctrl+z //挂起当前任务
# ctrl+c //结束当前任务