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 &
并且 关闭终端