pub unsafe fn install(
signal: Signal,
handler_sa: usize,
flags: SigActionFlags,
mask: SignalMask,
) -> Result<PreviousDisposition, Errno>Expand description
Installe une disposition pour le signal non-faute signal via
rt_sigaction(2), et rend la disposition précédente (pour
restore).
handler_sa: valeur brute desa_handler—SIG_DFL(0),SIG_IGN(1), ou l’adresse d’une fonction handlerextern "C"(castusize). C’est la couche 1 (air-signal) qui fournit le type de handler ; la couche 0 reste agnostique (adresse brute).flags: [SigActionFlags] (SA_SIGINFO/SA_RESTART/…). Sur x86_64, le wrapper ajouteSA_RESTORERet posesa_restorersur le trampolinert_sigreturnd’Air (obligatoire sans libc). Sur aarch64, le retour passe par le VDSO — aucunsa_restorer.mask: signaux additionnels bloqués pendant l’exécution du handler.
§Safety
Si handler_sa désigne une fonction (≠ SIG_DFL/SIG_IGN), l’appelant
doit garantir qu’elle est async-signal-safe (man 7 signal-safety) :
pas de malloc, pas de verrou, pas d’I/O bufferisée, etc. Le noyau peut
l’invoquer à un point arbitraire du programme. Poser SIG_DFL ou
SIG_IGN est en soi sûr (aucun code utilisateur), mais l’API reste
unsafe pour une frontière uniforme.
Ce wrapper est réservé aux signaux non-faute : installer un handler
pour SIGSEGV/SIGBUS/SIGFPE/SIGILL est le domaine (inerte) de
synchronous_handler (ADR-020/ADR-064).
§Errors
- [
Errno::EINVAL] :signalnon-catchable (SIGKILL/SIGSTOP).