8
votes

Quelles fonctions sont interrompues par des signaux même avec SA_RESTART?

existe une liste raisonnablement complète dont les fonctions de POSIX sont interrompues avec Eintr lorsqu'un signal est reçu ou manipulé, même s'il n'y a pas de gestionnaire de signal ou si le gestionnaire a été installé avec SA_RESTART ? Quelques exemples:

  • Sélectionnez
  • nanosleep
  • etc.

0 commentaires

3 Réponses :


1
votes

POSIX dit:

Si la fonction capture du signal exécute une instruction de retour, le comportement de la fonction interrompue doit être tel que décrit individuellement pour cette fonction, sauf indication contraire des fonctions dangereuses.

Donc, soit vous regardez à travers toutes les fonctions individuellement ou filtrez vos pages d'homme pour EINTR et POSIX. J'ai fait ce dernier et j'ai eu:

Accepter, AIO_SUSPEND, CATCLOSE, cubes, chmod, chown, clock_nanosleep, proche, fermé, relier, DUP, errno, EXEC, tombocat, fchdir, fchmod, fkown, fclose, fcntl, fflush, fgetc, fgetwc, fopen, fourchette, fputc, fippewc, Freopen, fsek, fsetpos, fsync, Ftrunate, Getgrent, GetGrgid, Getgram, getmsg, getpwent, GetPwnam, getPwuid, ioctl, lchown, lio_listio, Lockf, mq_open, mq_receive, mq_send, msgop, MSGRCV, msgsnd, nanosleep, ouvert, pause, pclose, sondage, POSIX_FALLACTE, 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_getDétachstate, pthread_attr_getguardise, pthread_attr_getikheritsched, 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_timedwrock, pthread_rwlock_unlock, pthread_rwlock_wrock, pthread_rwlockattr_getPshared, pthread_rwlockattr_init, pthread_self, pthread_setschedPrio, pthread_spin_init, pthread_spin_lock, pthread_spin_unlock, pthread_tescancel, putsg, lire, recv, Recvrom, RECVMSG, scanf, sélectionner, SELECT_TUT, SEM_OPEN, SEM_TIMEDWAIT, SEM_WAIT, smop, envoyer, sendmsg, envoyer à, shm_open, Sigaction, siginterrupt, Sigpause, SigProcmask, SIGSET, sigsuspend, sigvec, sigwaitinfo, STATFS, statvfs, système, tcdrain, tcsetattr, tmpfile, tronquer, ualarm, tu dors, attendre, waitid et écriture


5 commentaires

Mais certains d'entre eux retournent toujours -1 avec Eintr si un signal se produit, et d'autres renvoient -1 avec Eintr uniquement lorsqu'il y a un gestionnaire de signal installé sans SA_RESTART . Ma question consiste à distinguer ces deux cas.


Toutes les fonctions ci-dessus, à l'exception de MSGOP, SEMOP, SEM WAIT, et sélectionnez, sont redémarrées si un signal avec SA_RESTART est reçu et que le gestionnaire de signal revient. MSGOP, SEMOP, SEM Attendez toujours de retour -1 avec Eintr et le comportement de Select est défini par la mise en œuvre (peut échouer ou être redémarré).


Avez-vous une référence? Je ne trouve pas si / où il est spécifié dans POSIX.


lien et Link


Puisque Linux est une implémentation très populaire, il convient probablement de noter qu'il ne correspond pas strictement à Posix dans cette zone. Stackoverflow.com/questions/4959524/...



2
votes

tcsetattr n'est pas non plus redartable, au moins sous Linux 2.6.18


0 commentaires

1
votes

Si quelqu'un se demande, le Manpage pour Signal (7 ) a plus de détails sur ce qui est et ce qui n'est pas redémarré:


0 commentaires