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是标准输出。 |
|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )
GMT+8, 2024-12-23 05:04
Powered by Discuz! X3.4
© 2001-2013 Comsenz Inc.