问题标签 [eintr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1508 浏览

postgresql - 错误:无法打开文件“base/.../...”:系统调用中断

尝试在 Amazon Web Services 上运行 PostgreSQL 9.1 后,此错误已出现在数据库和应用程序日志中。在不同的 AWS VM 上重新安装没有帮助。奇怪的是,错误在活动片刻之后就消失了,只有在系统空闲一段时间后才返回。

填充数据库的 PostgreSQL 数据最近是从 CentOS 虚拟机流式传输的 WAL,并作为读写主机重新启动。

在 PostgreSQL 源代码中搜索“EINTR”会出现大量结果,但没有一个与打开基本文件有关。很多关于“无法打开文件”的引用。这些看起来很有希望:

0 投票
1 回答
819 浏览

linux - Proper way of handling SIGCHLD, EINT, and accept() in Linux

I have a program that creates a TCP server. When the accept() connects to a client, I fork() it and handle the connection. When that client leaves it calls the waitpid() because of the SIGCHLD, but this causes a EINTR in the accept(). My question is how should this be handled? I've read so many different ways.

Most say to ignore it the EINT and try the accept() again. I've even seen a macro to do just that: TEMP_FAILURE_RETRY(). Some say to set the sigaction flags SA_RESTART and SA_NOCLDSTOP. I've tried that and it introduces other errors (errno = ECHILD). Also, how should the child exit? I've seen both _exit(0) and exit(0).

The SIGCHLD handling is:

0 投票
1 回答
1024 浏览

linux - epoll_wait() 无限返回 EINTR

我有一个负责轮询各种 fd 的线程。我正在使用设置了超时的 epoll_wait。以下是代码片段:

eventsList 内存包含 timerfd、signalfd 和 socket fd。

该线程运行良好并处理定时器事件、套接字打开/读取/写入/关闭事件和用户定义的信号事件。

但是有时线程会进入无限 do-while 循环,因为 errno 总是返回EINTR
Top -H of thread 显示状态为睡眠。strace显示它正在循环调用 epoll_wait() 。

那么,当我使用公认的处理 epoll_wait 和 EINTR 的方式时,会出现什么问题呢?可能导致上述问题的套接字读/写/关闭有什么问题吗?还是用timerfd?

更新: strace -p 输出:

然后我拿了gcore并试图让epoll_wait()返回errno。它是 4 (EINTR)

0 投票
1 回答
69 浏览

c - 带有 EINTR-check 的 sem_timedwait 是否保证等待 >= 指定时间?

一种经常推荐的信号量定时等待方法是(为简洁起见):

假设信号量未发布(即预期超时),while 循环是否保证ts在指定的时间(或稍晚)退出?即是否保证while循环不会在指定的时间之前ts退出?

我有一半记得在指定的时间之前sem_timedwait()观察到退出-但我不记得那是否是因为我没有使用-check。我记得有一段时间我不太明白-check 的用途,所以我单独使用,而不是与 while-loop 和-check_ 结合使用。tsEINTREINTRsem_timedwait()EINTR

0 投票
0 回答
111 浏览

c - 我应该重试由于 EINTR 而失败的系统调用吗?

我见过这样的代码:

这个想法是重试系统调用,如果它因为被中断而失败。但这是个好主意吗?什么时候是个好主意,什么时候不应该这样做?这是否特定于某些平台,或者 WindowsUnix 系统调用是否会因 EINTR 而失败?如果我正在尝试编写跨平台代码,我应该怎么做?

0 投票
0 回答
100 浏览

c - 信号处理程序在线程中不起作用

我不明白为什么在下面的程序中,当一个 SIGINT 信号到达时,线程直接终止(即使没有被信号处理程序覆盖)。但是,这不会在此main()过程中发生。

信号处理程序:

线程函数:

在哪里:

线程创建和分离:

如果要检查所有代码:server.c:https ://pastebin.com/6BQA3mx6

客户端.c:https ://pastebin.com/e42hKPxj

utils.h:https ://pastebin.com/hLbySeFF

conn.h:https ://pastebin.com/fL5cMxcg

0 投票
1 回答
65 浏览

pgloader - pgloader:“连接”中的套接字错误:EINTR(中断的系统调用)和 HEAP-EXHAUSTED-ERROR

这些天,我尝试使用 pgloader 将数据从 mysql 迁移到 postgres。我遇到了HEAP-EXHAUSTED-ERRORSocket error。对于HEAP-EXHAUSTED-ERROR,我试图减少批量大小和工人,但没有奏效。对于EINTR (Interrupted system call),我不确定根本原因。