task2的前两个任务较为简单,第三个任务花的时间较长,主要学习了linux中的程序后台运行和进程管理。
我们写一个py文件,sleep.py它的功能是每隔10秒输出一下当前时间
我们可以利用:
python3 sleep.py
这个命令让这个程序运行起来,实现输出时间的功能。此时我们引入一个概念,就是我们打开terminal的时候,其实是开启了一个会话(Session),通过这个会话,我们可以使用vim编写文件,使用python3运行程序。在这个会话中,我们也可以使用(ctrl+c)这样的命令来终止一个一个程序的运行。
ctrl-c: ( kill foreground process ) 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行
ctrl-d: ( Terminate input, or exit shell ) 一个特殊的二进制值,表示 EOF,作用相当于在终端中输入exit后回车
ctrl-/ 发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件
ctrl-s 中断控制台输出
ctrl-q 恢复控制台输出
ctrl-l 清屏
至于为什么要终极程序运行,因为linux在程序运行的时候,会停在这个界面
无法执行我们其他的命令或者程序。如果我们想让这个程序运行的同时,执行其他的命令或者程序,我们就需要让这个程序stopped(挂起)或者在后台执行。
其中我们用
ctrl-z: ( suspend foreground process ) 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程,而并
非结束进程,用户可以使用使用fg/bg操作恢复执行前台或后台的进程。fg命令在前台恢复执行被挂起的进
程,此时可以使用ctrl-z再次挂起该进程,bg命令在后台恢复执行被挂起的进程,而此时将无法使用ctrl-z
再次挂起该进程;
一个比较常用的功能:
正在使用vi编辑一个文件时,需要执行shell命令查询一些需要的信息,可以使用ctrl-z挂起vi,等执行 完shell命令后再使用fg恢复vi继续编辑你的文件(当然,也可以在vi中使用!command方式执行shell命令,
但是没有该方法方便)。
这个命令就可以简单的实现进程的挂起,此时进程进入阻塞状态不再运行,如果我们希望把阻塞中的进程放回前台,或者后台运行,就需要用到
fg %进程号 #将程序放回前台运行
bg %进程号 #将程序放在后台运行
其中我们可以通过jobs -l
查看进程号
-
nohup和&:
对于一个程序,我们希望在运行的时候,就把这个程序直接挂在后台进行运行。为了实现这个功能,其实用nohup和&都可以,但是实际场景中,我们往往同时使用nohup 命令&
这是因为:-
如果使用&后台运行程序:
会输出到终端
使用ctrl + c发送SIGINT信号,程序免疫
关闭session发送SIGHUP信号,程序关闭 -
使用nohup后台运行程序
结果会默认输出到outhup.out
使用ctrl + c发送SIGINT信号,程序关闭
关闭session发送SIGHUP信号,程序免疫 -
因此平时线上需要我们同时使用nohup和&同时免疫SIGINT和SIGHUP信号
如果我们希望改变结果输出的地方,可以使用重新定位控制后台运行程序结果的输出
-
nohup python3 sleep.py > myout.txt &