后台运行程序 输入输出重定向等一些问题

在写本周小项目时,仔细了解了一下后台运行,输入,输出重定向和管道这些东西,因为作者是个水货,以前对这些东西真的是一知半解。

后台运行程序

我们在命令后面加上&,表示让这个进程去后台执行,即ctrl+c后仍在后台运行,但当关闭linux终端时,此程序就不在运行了,它接收到终端断开连接的信号就关闭了程序。

那么问题来了,如何在关闭终端后让这个程序还在跑呢?或者说让系统忽略终端断开连接的信号?我们可以直接在命令前面加上nohup,让系统忽略这个信号,那么就算关闭了终端,这个程序依旧可以运行。当我们想要关闭这个程序时,可以用kill命令。

输入 输出重定向

刚刚提到,让程序在后台运行,但如果当程序有输出时,它还是会影响到我们,这个时候,我们就可以让它输出到我们所指定的文件中去。如:command >output &

这就是让进程直接输出到output这个文件中去。那如果当进程出错,那错误信息是不是也可以存放到一个文件中呢?是的!
在这之前,我们先来看一个东西:

标准输入:0
标准输出:1
标准错误:2

所以写成这样:command 1>output 2>error &,1指标准输出,2指标准错误,输出信息存放在output这个文件中,错误信息存放在error这个文件中。那如果我想把输出信息和错误信息存放在一个文件中呢?是不是可以这样写:command 1>output 2>output &。

这样是不行的! 因为写成相同的文件名会冲突。

正确的写法应该是:ommand 1>output 2>&1 &

如果我们想忽略输出信息和错误信息呢?那就要用到/dev/null 这个设备了,/dev/null就相当于一个无底洞,所有定向到它的信息都会消失的无影无踪。所以当我们想忽略输出信息时,command 1>/dev/null 2>error &,同理,忽略错误信息:command 1>output 2>/dev/null &;忽略全部输出:command >/dev/null 2>&1 &

管道

我们说,linux下一切是文件,但管道是特殊的文件,因为它解决了文件之间不能通信的问题。管道是linux中的一种通信方式,是把一个程序的输出直接连接到一个程序的输入。

管道命令的操作符是:”|”

管道命令 就是用来连接多条指令的,前一条指令的输出流向会作为后一条指令的操作对象。

管道只能处理由前面一条指令传出的正确输出信息,对错误信息是没有直接处理能力的,然后,传递给下一条指令,作为操作对象。
  
那么管道是如何实现进程之间的通信的:

(1)父进程创建管道,得到两个⽂件描述符指向管道的两端 
 
(2)父进程fork出子进程,⼦进程也有两个⽂件描述符指向同⼀管道。 
 
(3)父进程关闭fd[0],子进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管读写端(因为管道只支持单向通信)。⽗进程可以往管道⾥写,⼦进程可以从管道⾥读,管道是⽤环形队列实现的,数据从写端流⼊从读端流出,这样就实现了进程间通信。  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值