嵌入式爱好者

Linux中的标准输入输出和进程与终端

2019-1-31 14:57| 发布者: impscott| 查看: 1105| 评论: 0

类目: S5P4418/6818系列产品  >  Linux     文档编号: 254

1、标准IO

每一个进程都有自己的文件描述符集合

当创建进程时,通常有3个打开文件描述符(0,1,2),0代表标准输入,1代表标准输出,2代表标准错误,它们统称为标准IO。

标准输入0    从键盘获得输入 /proc/self/fd/0 
标准输出1    输出到控制台 /proc/self/fd/1 
错误输出2    输出到控制台 /proc/self/fd/2 

2、/proc/self目录
/proc/self就是当前运行进程ID的符号链接

使用开发板的调试串口登录开发板
# ls  /proc/self/fd -l
total 0
lrwx------    1 root     root            64 Jan 31 13:49 0 -> /dev/console
lrwx------    1 root     root            64 Jan 31 13:49 1 -> /dev/console
lrwx------    1 root     root            64 Jan 31 13:49 2 -> /dev/console
ls: /proc/self/fd/3: cannot read link: No such file or directory
lr-x------    1 root     root            64 Jan 31 13:49 3

可以看到/proc/self/fd链接到终端控制文件上,这也是shell进程的控制终端
在UNIX/LINUX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端就成为Shell进程的控制终端(ControllingTerminal)。 
同时,进程的PCB中同样也保存着对应终端的信息。由于子进程会继承父进程的PCB信息,所以Shell的控制终端自然也是它启动的其它进程的控制终端。

使用ps -ax命令查看进程与哪个控制终端相连,开发板的ps命令不支持-ax选项,我们在Ubuntu中模拟,如下:
  3262 pts/2    Ss      0:00 bash
  3275 pts/1    S+     0:00 telnet 192.168.2.85
  3282 ?         Sl       0:02 /usr/bin/unity-2d-spread
  3287 pts/2    R+     0:00 ps -ax
bash是我们登录的shell进程,ps是我们另外启动的进程,可以看到shell进程与pts/2控制终端相连,另启动的进程也与该终端相连

4、标准IO的使用
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
2>/dev/null意思就是把错误输出到“黑洞”
>/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
2>&1 >/dev/null意思就是把错误输出2重定向到标准输出1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕 
关于这里”&”的作用,我们可以这么理解2>/dev/null重定向到文件,那么2>&1,这里如果去掉了&就是把错误输出给了文件1了,用了&是表明1是标准输出。
1

已解决

未解决

只是看看

刚表态过的朋友 (1 人)

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-22 11:08

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部