ARM을 실행하는 임베디드 Linux에서 타이머를 만드는 데 문제가 있습니다. 저는 집에서 만든 C++ 라이브러리를 사용하여 타이머를 관리합니다. 나는 직접 코드를 작성하지 않았고, 소스 코드에 액세스 할 수 있음에도 불구하고 구현을 깊이 알지 못했다 ... 잠시 동안 작동 한 다음 "EAGAIN"오류가 발생했습니다.timer_create() : -1 EAGAIN (자원 일시적으로 사용할 수 없음)
strace를 사용하여 타이머 ID가 작동하지 않을 때 높은 조용함을 발견했습니다!
timer_create(CLOCK_MONOTONIC, {0, SIGRT_3, SIGEV_SIGNAL, {...}}, 0xbed50af4) = -1 EAGAIN (Resource temporarily unavailable)
이 일하고 때 매우 낮은 타이머 ID를 참조하십시오
timer_create(CLOCK_MONOTONIC, {0x3, SIGRT_3, SIGEV_SIGNAL, {...}}, {0x3d}) = 0
내가 타이머의 수가 제한이라고 생각! 사실? 일단 타이머가 끝나면 타이머를 파괴해야합니까? 나는 또한 "timer_stats"커널 유틸리티를 사용했는데 이것은별로 도움이되지 않았다 ... 커널이나 다른 도구 안에 타이머를위한 다른 디버그 유틸리티가 있습니까?
도움 주셔서 감사합니다. 당신이 setrlimit(2)
을 올릴 수 있지만
The timer_create() function shall fail if:
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.
:
The kernel preallocates a "queued real-time signal" for each
timer created using timer_create(). Consequently, the number
of timers is limited by the RLIMIT_SIGPENDING resource limit
(see setrlimit(2)).
timer_create(3posix)
맨 그것에 대해 좀 더 무딘 :
'EAGAIN' 오류를 간단하게 처리하고 반복하여 타이머를 만들 수 없습니까? 아니면 모든 호출마다 'EAGAIN' 오류가 발생합니까? – rekire
나는 정말로 당신의 특정 타이머 문제에 관해 많이 알지 못한다.하지만 더 이상 필요하지 않을 때 무언가를 파괴하는 것은 좋은 생각 인 것 같다. – ereOn
항상 EAGAIN 오류가 발생합니다 ... – morandg