Linux系统理论操作学习26LInux的后台运行,重定向输出,前后台进程转换和管理
Posted 呆呆象呆呆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统理论操作学习26LInux的后台运行,重定向输出,前后台进程转换和管理相关的知识,希望对你有一定的参考价值。
1 输出的后台运行
1.1 简单后台运行
nohup
表示程序不被挂起
&
表示后台运行程序
如果说使用&
,就会出现问题:后台执行的进程,其父进程还是当前终端shell
的进程,而一旦父进程退出,则会发送hangup
信号给所有子进程,子进程收到hangup
以后也会退出。如果我们要在退出shell
的时候继续运行进程,则需要使用nohup
忽略hangup
信号,或者setsid
将将父进程设为init
进程(进程号为1
)
nohup your_commond &
注意:空行代表系统等待输入
上面的试验演示了使用nohup
加上&
使进程在后台运行,同时不受当前shell
退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown
命令:
./test.sh &
>>[1] 2539
jobs -l
>>[1]+ 2539 Running ./test.sh &
disown -h %1
1.2 python后台运行(不启用缓存,实时刷新)
-u
表示不启用缓存,实时输出打印信息到日志文件(如果不加-u,则会导致日志文件不会实时刷新代码中的print函数的信息)
nohup python3 -u xxx.py &
1.3 输出重定向
nohup your_commond >mylog.log 2>&1 &
cat mylog.log
注意:如果没有重定向的话nohup
会自动新建一个nohup.out
文件,作为重定向位置
注意:当写成>/dev/null
这种重定向形式的时候就是默认不输出
可以参考参考文献中的第一个里面有详细的讲解
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中。
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename > filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入
1.4 后台任务状态查询
jobs
命令:显示jobid
,运行状态,运行内容(当前终端后台运行的任务)。状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。
jobs -l
命令:可查看 pid
当你在其他终端接口上进行这个操作的时候就没有了,需要用ps
进行查询。类似于如下指令(下面例子就是在其他终端上进行查询的)
ps -ef|grep XXX
1.5 关闭当前后台运行的命令
kill命令:结束进程
通过jobs
命令查看jobnumber
,然后执行kill %jobnumber
通过ps
命令查看进程号PID
,然后执行 kill PID
Ctrl+c
如果是前台进程的话,直接执行Ctrl+c
就可以终止了,也可以把后台进程调到前台然后使用这个指令停止
1.6 前后台进程的切换与控制
fg
命令:将后台中的命令调至前台继续运行;如果后台中有多个命令,可以先用jobs
查看jobnun
,然后用 fg %jobnum
将选中的命令调出。(只能支持在当前终端,如果这个终端关闭)
Ctrl + z
命令:将一个正在前台执行的命令放到后台,并且处于暂停状态
bg
命令:将一个在后台暂停的命令,变成在后台继续执行;如果后台中有多个命令,可以先用jobs
查看jobnum
,然后用 bg %jobnum
将选中的命令调出继续执行。
2、下面我们举一个例子比较常见的前后台操作如下
程序代码如下
import time
print("start")
for i in range(1000):
time.sleep(1)
print(i,end = " ")
if i == 3:
a = input()
print(a)
print("end")
Last、参考文献
(1条消息) Linux 中的重定向!_zhangxiao123qqq的博客-CSDN博客
【Linux】Linux查看后台运行程序,并将其关闭_小哲的博客-CSDN博客
bash shell 让程序在Linux终端后台执行的命令 - 华为云
使程序在Linux下后台运行,程序运行前后台切换_刘永鑫的博客——宏基因组公众号-CSDN博客_linux 切换到后台
Linux后台运行java代码——nohup_zhangxiao123qqq的博客-CSDN博客
Python IOError: [Errno 5] Input/output error? - Stack Overflow
以上是关于Linux系统理论操作学习26LInux的后台运行,重定向输出,前后台进程转换和管理的主要内容,如果未能解决你的问题,请参考以下文章