shell中后台运行

# 背景

nohup的意思是“没有挂断”。 通常,当我们从系统注销时,所有正在运行的程序或进程都会挂起 (opens new window)或终止。 如果要在注销或退出Linux操作系统后运行任何程序,则必须使用nohup命令。 有许多程序需要很长时间才能完成。 我们不需要长时间登录来完成命令的任务。 我们可以使用nohup命令在后台运行这些类型的程序并稍后检查输出。 使用nohup命令的一些示例是内存检查,服务器重启,同步等。

# &

脚本准备:

testshell0.sh

#!/bin/bash
#trap "echo \"SIGHUP is received\"" 1
for i in {1..10000}; do
       echo "$i: in $0"
  1>&2 echo "$i: in $0"
  sleep 1
done
1
2
3
4
5
6
7

testshell1.sh

#!/bin/bash
nohup ./testshell0.sh &
for i in {1..10000}; do
  echo "$i: in $0"
  sleep 1
done
1
2
3
4
5
6

运行:

./testshell0.sh &
1

# nohup配合&【推荐】

# 没有'&'的nohup命令

  • 运行没有'&'的nohup命令时,它会在后台运行该特定命令后立即返回到shell命令提示符;
  • 如果nohup命令中没有提到任何重定向文件名,则nohup命令的输出将在nohup.out中写入文件。
  • 可以按以下方式执行该命令,以将输出重定向到output.txt文件。 检查output.txt的输出。
$ nohup bash sleep1.sh > output.txt
$ cat output.txt
1
2

# 带有'&'的nohup命令

nohup bash sleep1.sh &
1
nohup ./testshell0.sh &
1
$ tail -f nohup.out
1: in ./testshell0.sh
1: in ./testshell0.sh
2: in ./testshell0.sh
2: in ./testshell0.sh
3: in ./testshell0.sh
3: in ./testshell0.sh
1
2
3
4
5
6
7

# 参考链接

https://www.jianshu.com/p/747e0d5021a2

上次更新: 2022/04/15, 05:41:30
×