Linux fd 5 是什么文件描述符

2022-10-28 11:15:59 +08:00
 wtfedc

用 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, // [在这卡住不动了] 

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

补充

根据 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.

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

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

```
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
```
julyclyde
2022-10-28 16:23:36 +08:00
@wtfedc 那可能还有一个 connect 5 在你这句后面,你看看它 connect 了啥地址
应该是个文件名,unix domain socket
hsfzxjy
2022-10-28 19:39:23 +08:00
可以去 /proc/<pid>/fd 看是什么文件
julyclyde
2022-10-29 16:06:12 +08:00
@hsfzxjy 他这种情况看不到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/890633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX