加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为什么我不能`tail -f / proc / $pid / fd / 1`?

发布时间:2020-12-14 00:01:32 所属栏目:Linux 来源:网络整理
导读:我写了一个简单的脚本来回显它的PID: #/bin/bashwhile true; do echo $$; sleep 0.5;done 我正在一个终端中运行所述脚本(它一遍又一遍地说3844)并尝试在另一个终端中拖尾文件描述符: $tail -f /proc/3844/fd/1 它不会在屏幕上打印任何内容并挂起,直到^ c.
我写了一个简单的脚本来回显它的PID:

#/bin/bash

while true; do
    echo $$;
    sleep 0.5;
done

我正在一个终端中运行所述脚本(它一遍又一遍地说3844)并尝试在另一个终端中拖尾文件描述符:

$tail -f /proc/3844/fd/1

它不会在屏幕上打印任何内容并挂起,直到^ c.为什么?

此外,所有STD文件描述符(IN / OUT / ERR)链接到相同的pts:

$ls -l /proc/3844/fd/
total 0
lrwx------ 1 mg mg 64 sie 29 13:42 0 -> /dev/pts/14
lrwx------ 1 mg mg 64 sie 29 13:42 1 -> /dev/pts/14
lrwx------ 1 mg mg 64 sie 29 13:42 2 -> /dev/pts/14
lr-x------ 1 mg mg 64 sie 29 13:42 254 -> /home/user/test.sh
lrwx------ 1 mg mg 64 sie 29 13:42 255 -> /dev/pts/14

这是正常的吗?

运行Ubuntu GNOME 14.04.

如果您认为这个问题属于SO或SU而不是UL,请告诉我们.

解决方法

做一个尾巴-f,它解释了一切.有趣的部分:

13791 fstat(3,{st_mode=S_IFREG|0644,st_size=139,...}) = 0
13791 fstatfs(3,{...}) = 0
13791 inotify_init()                    = 4
13791 inotify_add_watch(4,"/path/to/file",IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3,...}) = 0
13791 read(4,0xd981c0,26)             = -1 EINTR (Interrupted system call)

它能做什么?它为文件设置了一个inotify处理程序,然后等待该文件发生.如果内核通过此inotify处理程序说明尾部,则文件已更改(通常是附加),则tail 1)搜索2)读取更改3)将它们写出到屏幕.

系统上的/ proc / 3844 / fd / 1是/ dev / pts / 14的符号链接,它是一个字符设备.没有像“内存映射”这样的东西,可以通过它访问.因此,没有任何可以对inotify签名的更改,因为没有可以访问的磁盘或内存区域.

这个字符设备是一个虚拟终端,它实际上就像它是一个网络套接字一样工作.在此虚拟终端上运行的程序将连接到此设备(就像您远程登录到tcp端口一样),并编写他们想要写入的内容.还有更复杂的东西,例如锁定屏幕,终端控制序列等,这些通常由ioctl()调用处理.

我想,你想以某种方式观看虚拟终端.它可以在linux上完成,但它不是那么简单,它需要一些类似网络代理的功能,以及这些ioctl()调用的一些棘手的使用.但是有一些工具可以做到这一点.

目前我不记得了,哪个debian软件包有这个目标的工具,但是通过一些谷歌搜索你可能很容易找到.

扩展:正如@Jajesh在这里提到的(如果你给我一个给他一个),该工具被命名为watch.

扩展#2:@kelnos提到,一个简单的cat / dev / pts / 14也足够了.我试过了,是的,它有效,但不正确.我没有对此进行过多次实验,但在我看来,进入该虚拟终端的输出既可以用于cat命令,也可以用于其原始位置,而不会同时用于两者.但它不确定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读