Running Python Programs Without Hanging Up
不挂起运行指令——nohup与&
nohup放在命令的开头,表示不挂起(no hang up),也即,在关闭终端或者退出用户账号时,进程也会继续保持运行。- 一般会配合
&符号一起使用。如nohup ...command... &。将&符号放在启动参数后面表示设置此进程为后台进程,也即非阻塞性运行,如果不加&,则会执行完该命令后才能执行后面的命令。
输出重定向
在Linux中,文件描述符0、1、2分别表示标准输入stdin、标准输出stdout、标准错误stderr流。在数字后添加>与目标文件即可完成重定向,如:
> file表示将标准输出输出到file中,也就相当于1 > file;2 > error表示将错误输出到error文件中2>&1错误重定向到标准输出上(&1表示1对应的文件,这里就是标准输出)2>&1 > file错误输出到终端,标准输出重定向到文件file,等于> file 2>&1(标准输出重定向到文件,错误重定向到标准输出)。
因此,常用指令command > file.log 2>&1实现输出的重定向。
结合Python:-u参数
虽然stderr和stdout默认都是直接输出,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会打印到屏幕上。
因此需要有一种方法,取消stdout的缓存,直接输出到屏幕上。python的-u参数就起到这样的作用。python命令加上-u(unbuffered)参数后会强制其标准输出也同stderr一样不通过缓存直接打印到屏幕。
因此,将以上几条结合起来,可以得到运行指令:nohup python -u main.py > nohup.out 2>&1 &。
监测运行情况
为了保证程序正确运行,可以通过运行日志查看程序运行情况。
- 显示文件前部(前6行):
$ head -6 readme.txt; - 显示文件后部(后25行):
$ tail -25 mail.txt; - 结合
head与tail的指令,显示档案的第 11 行到第 20 行:$ head -20 file | tail -10。
终止进程
- 使用
jobs -l命令可以查看到进程的PID; - 使用
kill -9 PID可以终止该进程。