Skip to content
Syscall BSD#46

svc · unix #46

sigaction

Installe ou interroge la disposition d'un signal : handler et flags.

Prototype

int sigaction(int signum, struct __sigaction *nsa, struct sigaction *osa);

Retour: int

Arguments

NameTypeDirDescription
signumint-
nsastruct __sigaction-
osastruct sigaction-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard46
xnu-1486.2.1146
xnu-1504.15.346
xnu-1504.3.1246
xnu-1504.7.446
xnu-1504.9.1746
xnu-1504.9.2646
xnu-1504.9.3746

Exemples

Install SIGINT handler

#include <signal.h>

void on_int(int s) { (void)s; }

struct sigaction sa = {0};
sa.sa_handler = on_int;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
sigaction(SIGINT, &sa, NULL);

Notes

La struct sigaction permet de choisir SA_SIGINFO (handler à trois arguments avec siginfo_t et ucontext_t), SA_RESTART pour relancer les syscalls interrompus, SA_ONSTACK pour s'exécuter sur la stack alternative et SA_RESETHAND pour une sémantique one-shot. Sur Darwin, le wrapper libc passe par __sigaction et le trampoline _sigtramp, sur lequel s'appuient les unwinders.

Détection

La probe DTrace syscall::sigaction:entry montre arg0 comme numéro de signal ; combiner avec copyinstr de l'adresse du handler pour la symbolication. Souvent vérifié par les profils sandbox.

API associées

killsigprocmasksigaltstacksigsuspend__sigwait