nohup & 让进程在后台运行的用法

nohup & 让进程在后台运行的用法

准备一个可以长时间跑的脚本。

$ cat t.sh
#!/bin/bash
for i in $(seq 100)
do
sleep 1s
echo "i $i"
done

1.cmd

终端A运行/bin/bash t.sh
此时终端B可见t.sh进程
1.此时终端A Ctrl + C 或者 终端A 关闭
此时终端B不可见t.sh进程

2.cmd &

终端A运行/bin/bash t.sh &
此时终端B可见t.sh进程
1.终端A Ctrl + C
此时终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)
2.终端A 关闭
此时终端B不可见t.sh进程 ( 如果进程是adb logcat实时任务也如此)
3.终端A exit
此时终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)

3.bash并且 cmd &

终端A运行bash
终端A运行/bin/bash t.sh &
终端B可见t.sh进程
1.终端A Ctrl + C
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)
2.终端A 关闭不确认关闭
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)
3.终端A $ exit
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)

4.nohup cmd

终端A运行nohup /bin/bash t.sh
终端B可见t.sh进程
1.终端A Ctrl + C
终端B不可见t.sh进程 (如果进程是adb logcat实时任务也如此)
2.终端A 关闭,确认关闭
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)

5.bash并且nohup cmd

终端A运行bash
终端A 运行nohup /bin/bash t.sh
终端B可见t.sh进程
1.终端A Ctrl + C
终端B不可见t.sh进程 (如果进程是adb logcat实时任务也如此)
2.终端A 关闭,确认关闭
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)

6.nohup cmd &

终端A运行 nohup /bin/bash t.sh &
终端B可见t.sh进程
1.终端A Ctrl + C
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)
2.终端A exit
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)
3.终端A 关闭不确认关闭
终端B可见t.sh进程 (如果进程是adb logcat实时任务也如此)

可见:

  • nohup & '&‘区别为 Ctrl+ C可以杀死nohup的进程,杀不死’&'的进程,
  • nohup & '&‘区别为 关闭终端杀不死nohup的进程,可以杀死’&'的进程,
  • exit命令杀不死’&'的进程
  • 用bash新开一个进程后,和不开bash不一样, Ctrl + C | 关闭终端 | exit命令 都杀不死&的进程
  • 用bash新开一个进程后,和不开bash一样。
  • 对于普通进程t.sh和实时进程adb logcat,结果是一样的

所以让进程在后台跑可以以下方式

1. cmd &并且 exit
2. bash并且 cmd &并且 exit
3. bash并且 cmd &并且 关闭终端
4. nohup cmd并且 关闭终端
5. bash并且 nohup cmd并且 关闭终端
6. nohup cmd &并且 exit
7. nohup cmd &并且 关闭终端

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/coraline1991/article/details/120313322