Какие функции прерываются сигналами даже при SA_RESTART? - PullRequest
6 голосов
/ 23 марта 2011

Существует ли какой-либо достаточно полный список функций, которые в POSIX прерываются с помощью EINTR при получении или обработке сигнала, даже если нет обработчика сигнала или если этот обработчик был установлен с SA_RESTART?Некоторые примеры:

  • select
  • nanosleep
  • и т. Д.

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

tcsetattr также не перезапускается, по крайней мере, в Linux 2.6.18

1 голос
/ 19 января 2019

Если кому-то интересно, на справочной странице для signal(7) есть больше подробностей о том, что перезапускается, а что нет:

1 голос
/ 25 марта 2011

POSIX говорит:

Если функция захвата сигнала выполняет оператор возврата, поведение прерванной функции должно быть таким, как описано для этой функции отдельно, за исключением того, что отмечено для небезопасных функций.

Итак, вы либо просматриваете все функции по отдельности, либо фильтруете свои справочные страницы для EINTR и POSIX. Я сделал последнее и получил:

принять, aio_suspend, catclose, catgets, CHMOD, Чаун, clock_nanosleep, близко, closedir, подключения, DUP, ERRNO, EXEC, fallocate, fchdir, fchmod, fchown, fclose, Fcntl, fflush, fgetc, fgetwc, Еореп, вилка, fputc, fputwc, freopen, FSEEK, fsetpos, FSYNC, ftruncate, getgrent, getgrgid, getgrnam, getmsg, getpwent, getpwnam, getpwuid, IOCTL, lchown, lio_listio, lockf, mq_open, mq_receive, mq_send, msgop, msgrcv, msgsnd, nanosleep, открыть, Пауза, pclose, опрос, posix_fallocate, posix_mem_offset, posix_trace_create, posix_trace_get_filter, posix_trace_getnext_event, posix_trace_open, posix_trace_start, posix_typed_mem_get_info, posix_typed_mem_open, Printf, pthread_atfork, pthread_attr_getdetachstate, pthread_attr_getguardsize, pthread_attr_getinheritsched, pthread_attr_getschedparam, pthread_attr_getschedpolicy, pthread_attr_getscope, pthread_attr_getstack, pthread_attr_getstackaddr, pthread_attr_getstacksize, pthread_attr_init, pthread_barrier_init, pthread_barrier_wait, pthread_barrierattr_getpshared, pthread_barrierattr_init, pthread_cancel, pthread_cleanup_push, pthread_cond_init, pthread_cond_signal, pthread_cond_wait, pthread_condattr_getclock, pthread_condattr_getpshared, pthread_condattr_init, pthread_create, pthread_detach, pthread_equal, pthread_getconcurrency, pthread_getschedparam, pthread_getspecific, pthread_join, pthread_key_create, pthread_key_delete, pthread_kill, pthread_mutex_getprioceiling, pthread_mutex_init, pthread_mutex_lock, pthread_mutex_timedlock, pthread_mutexattr_getprioceiling, pthread_mutexattr_getprotocol, pthread_mutexattr_getpshared, pthread_mutexattr_gettype, pthread_mutexattr_init, pthread_once, pthread_rwlock_init, pthread_rwlock_rdlock, pthread_rwlock_timedrdlock, pthread_rwlock_timedwrlock, pthread_rwlock_unlock, pthread_rwlock_wrlock, pthread_rwlockattr_getpshared, pthread_rwlockattr_init, pthread_self, pthread_setschedprio, pthread_spin_init, pthread_spin_lock, pthread_spin_unlock, pthread_testcancel, putmsg, читать, RECV, recvfrom, recvmsg, зсапЕ, Выбрать, select_tut, sem_open, sem_timedwait, sem_wait, semop, Отправить, sendmsg, Отправить, shm_open, sigaction, siginterrupt, sigpause, sigprocmask, sigset, sigsuspend, sigvec, sigwaitinfo, statfs, statvfs, система, tcdrain, tcsetattr, tmpfile, усечение, ualarm, ты спишь, Подождите, Вайдид и написать

...