Linux 后台运行python .sh等程序,以及查看和关闭后台运行程序操
1、运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。 (1)&命令 功能:加在一个命令的最后,可以把这个命令放在后台执行 (2)nohup命令 功能:不挂断的运行命令 2、查看当前后台运行的命令 有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了。而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。 (1)jobs命令 功能:查看当前终端后台运行的任务 jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。 ? (2)ps命令 功能:查看当前的所有进程 ps -aux | grep "test.sh" #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分 ? 3、关闭当前后台运行的命令 kill命令:结束进程 (1)通过jobs命令查看jobnum,然后执行 kill %jobnum (2)通过ps命令查看进程号PID,然后执行 kill %PID 如果是前台进程的话,直接执行 Ctrl+c 就可以终止了 ? 4、前后台进程的切换与控制 (1)fg命令 功能:将后台中的命令调至前台继续运行 如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。 (2)Ctrl + z 命令 功能:将一个正在前台执行的命令放到后台,并且处于暂停状态 (3)bg命令 功能:将一个在后台暂停的命令,变成在后台继续执行 如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。 ? 5、运行Python示例 [[email?protected] nlp]# nohup python -u jbabs.py > out.log 2>&1 & [1] 20087 [[email?protected] nlp]# jobs [1]+ Running nohup python -u jbabs.py > out.log 2>&1 & ?
2、2>&1 表示把标准错误重定向到标准输出,这里&1表示标准输出 , 为什么需要将标准错误重定向到标准输出的原因,是因为标准错误没有缓冲区,而STDOUT有。 这就会导致 commond > python.log ,2> python.log 文件python.log被两次打开,而STDOUT和 STDERR将会竞争覆盖,这肯定不是我门想要的
在当我们直接关闭shell窗口,再连接上服务器,查看Python的进程,发现进程还在 但是,在python运行中却查看不到输出! 因为: python的输出有缓冲,导致python.log3并不能够马上看到输出。 使用-u参数,使得python不启用缓冲。 所以改正命令,就可以正常使用了 $ nohup python -u test.py > out.log 2>&1 & (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |