在指令运行的过程中,可能有一下三种情况造成指令中止:
- 指令运行出错
- 我们用Ctrl+C发送了中止信号,中止了指令继续运行
- 关闭了终端,造成终端下运行的指令中止
那么我们今天不讨论第一种情况,着重看下面两种如何避免;那么我们就要学习nohup和&的用法和区别了,接下我们来运行下面这段程序,做几个实验来实验一下:
import time
n = 0
while 1:
n += 1
print(n)
time.sleep(1)
分别用nohup和&对程序进行守护,然后用2、3两种方式中止程序,看看会出现什么效果:
- 用nohup守护,用Ctrl+C中止
这里都做了哪些事情呢?
1) 查看了当前进程,是没有python程序在运行的
2) 用nohup守护运行了python3 test.py,发现用nohup运行指令,其结果会输出到nohup.out中
3) 然后用Ctrl+C中止了程序的运行
4) 再用ps指令查看了当前进程,发现还是没有
5) 最后输出nohup.out中的内容,发现程序确实是在运行的
结论:nohup守护不了Ctrl+C的中止 - 用nohup守护,用关闭终端中止
这里又做了哪些事情呢?
1) 查看了当前进程,是没有python程序在运行的
2) 用nohup守护运行了python3 test.py
3) 然后通过关闭终端中止了程序的运行
4) 再打开了一个终端
5) 用ps指令查看了当前进程,发现还在继续运行
结论:nohup可以守护关闭终端造成的中止 - 用&守护,用Ctrl+C中止
这里做了哪些事情呢?
1) 查看了当前进程,是没有python程序在运行的
2) 用&守护运行了python3 test.py
3) 然后通过Ctrl试图中止程序的运行
4) 发现还在继续运行
结论:&可以守护Ctrl+C的中止 - 用&守护,用关闭终端中止
这里又做了哪些事情呢?
1) 继续上面的操作
2) 关闭了终端
3) 重新打开了一个终端,查看进程,发现进程没有了
结论:&不可以守护关闭终端造成的中止
敲黑板,记笔记了:
- 我们可以用 ps -aux 来查看进程
- 我们可以用 kill 进程id(PID),来结束进程
- nohup 守护不了Ctrl+C的中止
nohup 可以守护关闭终端造成的中止
& 可以守护Ctrl+C的中止
& 不可以守护关闭终端造成的中止 - 那我们是不是可以来个组合拳呢?
nohup python3 test.py &
发现真的可以,接下来就再也不怕手贱中止程序了,如果真的要中止,可以通过kill来实现;