gpt4 book ai didi

c - TIME_CREATE 返回 EAGAIN,但资源充足

转载 作者:太空宇宙 更新时间:2023-11-04 10:15:17 25 4
gpt4 key购买 nike

代码是这样的。在某些情况下,会返回eagain。

struct sigevent sev;
sev.sigev_notify = SIGEV_THREAD_ID;
sev._sigev_un._tid = syscall(SYS_gettid);
sev.sigev_signo = alarm_signal();
r = timer_create(CLOCK_MONOTONIC, &sev, &_steady_clock_timer);
assert(r >= 0);

在man中,有两种情况返回EGAIN,

EAGAIN
The system lacks sufficient signal queuing resources to honor the request.
EAGAIN
The calling process has already created all of the timers it is allowed by
this implementation.

第一种情况,在我们的机器上,ulimit -i 是2061776,达不到这个限制。

第二种情况说的timer limit是什么,怎么找?

最佳答案

你必须在这里处理 EAGAIN 的情况。

timer_create() 的实现在系统调用处理期间进行了两次分配。如果 a) 定时器分配或 b) 信号队列分配失败,则可能会发生这种情况。

要查看的另一件事是找到正在运行的任务的 sigpending 大小。可以增加运行任务的 RLIMIT_SIGPENDING (man setrlimit)。使用 ulimit 进行更改只会影响 shell 和由它启动的进程,因此它可能不会直接影响您的应用程序。

关于c - TIME_CREATE 返回 EAGAIN,但资源充足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46637913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com