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。+ 号表示当前任务,- 号表示后一个任务。

image-20210623154847270

jobs -l命令:可查看 pid

image-20210623155030156

当你在其他终端接口上进行这个操作的时候就没有了,需要用ps进行查询。类似于如下指令(下面例子就是在其他终端上进行查询的)

ps -ef|grep XXX

image-20210623155708030

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")

image-20210623152301642

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的后台运行,重定向输出,前后台进程转换和管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统理论操作学习27全部杀掉某个程序进程的5种方法

linux系统中挂起操作和强制结束操作(后台运行程序方法)

Linux入门之Linux环境下如何让进程在后台运行

Linux 学习总结(二十二) 系统管理技巧

2018-1-11 Linux学习笔记

2018/09/26 LINUX安装及linux命令之ls命令学习