linux之stdin
查看dev下的文件详细
[root@test-master ~]# ll /dev/
···
lrwxrwxrwx 1 root root 15 Dec 7 2018 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Dec 7 2018 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Dec 7 2018 stdout -> /proc/self/fd/1
···
- 发现stdin对应操作符0
- stdout对应操作符1
- stderr对应操作符2
查看操作符0详细
[root@test-master ~]# ll /proc/self/fd/0
lrwx------ 1 root root 64 Dec 27 14:59 /proc/self/fd/0 -> /dev/pts/3
- 发现操作符0软链到/dev/pts/3
/proc/self/目录的意义: 我们可以通过/proc/$pid/来获取指定进程的信息,例如内存映射、CPU绑定信息等等。如果某个进程想要获取本进程的系统信息,就可以通过进程的pid来访问/proc/$pid/目录。但是这个方法还需要获取进程pid,在fork、daemon等情况下pid还可能发生变化。为了更方便的获取本进程的信息,linux提供了/proc/self/目录,这个目录比较独特,不同的进程访问该目录时获得的信息是不同的,内容等价于/proc/本进程pid/。进程可以通过访问/proc/self/目录来获取自己的系统信息,而不用每次都获取pid。同想可通过
ls -all /proc/self
发现链接到某进程文件夹
查看/dev/pts文件夹下文件详情
[root@test-master ~]# ll /dev/pts
total 0
crw--w---- 1 root tty 136, 0 Dec 27 14:19 0
crw------- 1 root root 136, 1 Dec 27 14:08 1
crw--w---- 1 root tty 136, 3 Dec 27 15:02 3
c--------- 1 root root 5, 2 Dec 7 2018 ptmx
- 0/1/3分别对应三个窗口连接
- 当新打开一个窗口连接时,此处会新增一个文件
在一个窗口中向另外一个窗口发送数据
[root@test-master dev]# ll /proc/self/fd/0
lrwx------ 1 root root 64 Dec 27 15:04 /proc/self/fd/0 -> /dev/pts/0
[root@test-master dev]# echo "test" > /dev/pts/3
另一个窗口收到内容
[root@test-master ~]# test
可通过命令
tty
查看当前的终端号
打开某个文件,查看fd的情况
- vim打开任一文件
[root@test-master ~]# vi anaconda-ks.cfg
- 通过ctrl+z将vim置于后台
- 查看vi进程的进程号
[root@test-master ~]# ps -ef|grep vi
root 374 58881 0 15:46 pts/3 00:00:00 vi anaconda-ks.cfg
- 查看该进程的操作符
[root@test-master ~]# ll /proc/374/fd/ total 0 lrwx------ 1 root root 64 Dec 27 15:48 0 -> /dev/pts/3 lrwx------ 1 root root 64 Dec 27 15:48 1 -> /dev/pts/3 lrwx------ 1 root root 64 Dec 27 15:47 2 -> /dev/pts/3 lrwx------ 1 root root 64 Dec 27 15:48 4 -> /root/.anaconda-ks.cfg.swp
- 其中0/1/2分别对应 stdin/stdout/stderr
- 4对应的即为该文件的操作符
- 恢复vi
[root@test-master temp]# jobs
[1]- Stopped vi anaconda-ks.cfg (wd: ~)
[2]+ Stopped vi ca.crt
[root@test-master temp]# fg 1
如果程序是nohup方式启动的,则会发现stdin为/dev/null