Linux – Python程序nohup后台运行
nohup
运行Python程序
nohup python my.py >> my.log 2>&1 &
# 或者
nohup python my.py >> nohup.out 2>&1 &
# 或者
nohup python my.py & # 这种写法和上面第二种写法等价
2>&1 错误内容重定向到标准输出
0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1 是一个整体,> 左右不能有空格,即将错误内容重定向输入到标准输出中去。
& 后台运行
nohup python my.py >> my.log 2>&1 &
# 等价于下面两行的内容
nohup python my.py 1>> my.log &
nohup python my.py 2>> my.log &
而加2>&1中的&是为了区别文件1和1(标准输出),假如为2>1,那么不就成了将错误内容输出到文件1中。
可能存在的问题
生成了nohup.out文件,但是内容始终是空的。
原因与解决
python的输出又缓冲,导致nohup.out并不能够马上看到输出。
-u 参数,使得python不启用缓冲。
nohup python -u my.py >> nohup.out 2>&1 &
我只是将我用到的部分转载过来,下面是原文出处。下文我会加点自己的遇到的问题。
版权声明:本文为CSDN博主「小孟Tec」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38024592/article/details/103336210
执行上面命令后
执行后一直是空行,就像在前台运行该程序一样,没弹出命令行输入提示,这时按回车或者CTRL+C都会使程序终止。这时只需直接输入要用的命令即可。比如:输入jobs查看当前终端后台执行的任务(ps 和 jobs的区别在于:jobs 只能查看当前终端后台执行的任务,换了终端就看不见了。而ps命令适用于查看瞬时进程的动态,可以看到别的终端的任务。)
查看当前终端后台运行的任务
jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。
查看当前的所有进程
ps aux #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
# 可以加管道符
ps -aux | grep "test.sh"
关闭当前后台运行的命令
kill命令:结束进程
(1)通过jobs命令查看jobnum,然后执行 kill %jobnum (%jobnum 表示此处用job的id填充,不需要输入%)
(2)通过ps命令查看进程号PID,然后执行 kill %PID
如果是前台进程的话,直接执行 Ctrl+c 就可以终止了
前后台进程的切换与控制
(1)fg命令
功能:将后台中的命令调至前台继续运行
如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。
(2)Ctrl + z 命令
功能:将一个正在前台执行的命令放到后台,并且处于暂停状态
(3)bg命令
功能:将一个在后台暂停的命令,变成在后台继续执行
如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。
nohup与bg区别
nohup:特点是可以关闭shell窗口,但是没有暂停功能,用ps查看,kill杀死
ctrl+z挂起 或 bg:特点是不可以关闭shell窗口,具有暂停功能,用jobs查看,关闭shell窗口或者kill来杀死。
ctrl+Z 将现在前景的、运行的程序,变成背景的、暂停的工作。
jobs 查看背景中的工作编号。 jobs -l可以查看工作进程编号。
fg %1 调回前景环境运行。将方括号编号为[1]的背景的、暂停的程序,变成前景的、运行的程序。
bg %2 将背景环境中暂停的工作运行起来。将方括号编号为[2]的背景的、暂停的程序,变成背景的、运行的程序。
区别:
- 后台运行(nohup)和背景运行(bg)不一样。在背景(bg)中的、运行的程序不能被ctrl+C 终止掉,但是可以关闭shell终端或者kill来终止掉。后台运行(nohup)的程序,关闭shell也不能终止掉,需用kill来终止掉。
- 背景环境中的程序依赖当前shell窗口存活。背景环境中的进程叫工作。一个shell中的背景环境中的工作,可以用jobs查看,当前shell窗口关闭了背景中的工作也就关闭了。所以在其他shell窗口中,jobs查不到背景环境中的工作。
菜鸟笔记,仅为个人笔记
来源:DreamingBetter