nohup和&后台运行
&
- 对
SIGINT
信号免疫,当你在执行./xxx.sh &
时, 即使用ctrl C
照样运行。 - 对
SIGHUP
信号不免疫,即关掉shell后进程同样消失。
nohup命令
当运行nohup ./xxx.sh
时
- 对
SIGHUP
信号免疫,关闭shell, 进程还是存在的。 - 对
SIGINT
信号不免疫
shell中用Ctrl C
, 那么进程会消失
如何让一个程序真正永远在后台执行,那就用nohua ./xxx.sh >/dev/null 2>&1 &
。
如果程序有输出,它会试着把输出写入执行上述命令的当前文件夹下的 nohup.out 文件中,当写入失败,就会写当前用户的$HOME目录下的nohup.out 中
>/dev/null 2>&1
命令
/dev/null 代表空设备文件
代表重定向到哪里,例如:echo “123” > /home/123.txt
1
表示stdout标准输出,系统默认值是1,所以>/dev/null
等同于1>/dev/null
2
表示stderr标准错误&
表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么>/dev/null 2>&1
语句:
1>/dev/null
首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。2>&1
接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
查看后台任务
用ps -def | grep查找进程很方便,最后一行总是会grep自己
用grep -v
参数可以将grep命令排除掉
再用awk
提取一下进程ID
ps -ef | grep AutoPackingShell.sh | grep -v grep | awk '{print $2}'
终止后台运行的进程
kill -9 12869