V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wtfedc
V2EX  ›  问与答

Linux fd 5 是什么文件描述符

  •  
  •   wtfedc · 2022-10-28 11:15:59 +08:00 · 1555 次点击
    这是一个创建于 756 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 strace docker build.....的过程中,发现在 npm install --registry=xxx.com 那一步,有些问题:

    read(5, 0xc00048d000, 4096)             = -1 EAGAIN (Resource temporarily unavailable)
    epoll_pwait(4, {{EPOLLOUT, {u32=3554582280, u64=139937884053256}}}, 128, 0, NULL) = 1
    epoll_pwait(4, {{EPOLLIN|EPOLLOUT, {u32=3554582280, u64=139937884053256}}}, 128, -1, NULL) = 1
    futex(0x7f45d8a0b0d0, FUTEX_WAKE_PRIVATE, 1) = 1
    read(5, "33\r\n{\"stream\":\" ---\\u003e Runnin"..., 4096) = 57
    write(1, " ---> Running in 161d1d6bb0fc\n", 30 ---> Running in 161d1d6bb0fc
    ) = 30
    read(5, 0xc00048d000, 4096)             = -1 EAGAIN (Resource temporarily unavailable)
    epoll_pwait(4, {}, 128, 0, NULL)        = 0
    epoll_pwait(4, // [在这卡住不动了] 
    

    有两个不太理解的地方,请老哥指点:

    • fd 4 5 ,分别表示什么,google 没人说清楚,都是说 1 2 3 的
    • 我 ping/curl registry 地址是没问题的,在另一台设备 npm install --registry 也是正常的,现在我该如何排查🤏

    补充

    根据 linux read 的描述 ssize_t read(int fd, void *buf, size_t count);

    read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.

    8 条回复    2022-10-29 16:06:12 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       2022-10-28 11:30:58 +08:00   ❤️ 1
    没有特定含义,就是按顺序,除了 012 固定打开的,下一个打开的广义上的“文件”,的文件描述符就是 3 ,再下一个就是 4 ,以此类推,
    LaTero
        2
    LaTero  
       2022-10-28 13:01:20 +08:00 via Android
    strace 加参数-yy 就能看到是什么
    kakalala
        3
    kakalala  
       2022-10-28 13:06:12 +08:00 via Android   ❤️ 1
    strace -e "openat"
    julyclyde
        4
    julyclyde  
       2022-10-28 13:32:13 +08:00
    往回翻一翻,应该有个什么函数的返回值等于 4 和 5
    看这个函数打开了什么资源

    我猜一下可能是个网络连接吧?因为我看 read 5 的内容有点像 json
    wtfedc
        5
    wtfedc  
    OP
       2022-10-28 15:13:05 +08:00
    @julyclyde 往前翻了许久,果然发现一个👍

    ```
    socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
    ```
    julyclyde
        6
    julyclyde  
       2022-10-28 16:23:36 +08:00   ❤️ 1
    @wtfedc 那可能还有一个 connect 5 在你这句后面,你看看它 connect 了啥地址
    应该是个文件名,unix domain socket
    hsfzxjy
        7
    hsfzxjy  
       2022-10-28 19:39:23 +08:00 via Android
    可以去 /proc/<pid>/fd 看是什么文件
    julyclyde
        8
    julyclyde  
       2022-10-29 16:06:12 +08:00
    @hsfzxjy 他这种情况看不到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3491 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.