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杀掉进程
常用任务管理命令
# jobs //查看任务,返回任务编号n和进程号
# bg %n //将编号为n的任务转后台运行
# fg %n //将编号为n的任务转前台运行
# ctrl+z //挂起当前任务
# ctrl+c //结束当前任务
查看进程
ps aux |fgrep ‘mylog.sh‘|grep -v grep
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分
用grep -v参数可以将grep命令排除掉
用awk提取一下进程ID,即 ps -aux|grep mylog.sh| grep -v grep | awk ‘{print $2}‘