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

  1. ps -ef | grep AutoPackingShell.sh | grep -v grep | awk '{print $2}'

终止后台运行的进程

  1. kill -9 12869