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

Posted 小风筝123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 &并且 关闭终端

以上是关于nohup & 让进程在后台运行的用法的主要内容,如果未能解决你的问题,请参考以下文章

怎么让 Linux 进程在后台运行?

linux后台执行命令:&和nohup的用法,确实很实用

让进程在后台可靠运行的几种方法 nohup,setsid,&,disown,CTRL-z ,screen

Linux的后台执行进程之nohup

nohup 命令(设置后台进程): appending output to ‘nohup.out’ 问题

nohup 命令(设置后台进程): appending output to ‘nohup.out’ 问题