Set y Oldset en sigprocmask()
No he entendido completamente cómo usar sigprocmask()
. En particular, cómo funcionan set
y oldset
y su sintaxis y cómo usarlos.
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
Por favor, explique con un ejemplo, para bloquear, diga SIGUSR1 durante unos segundos y luego desbloquearlo y manejarlo.
1 answers
La idea es que proporcione una máscara en set
, efectivamente una lista de señales. El argumento how
dice lo que debe hacer con la máscara en set
.
Puede usar SIG_BLOCK
para bloquear las señales en la lista set
, o SIG_UNBLOCK
para desbloquearlas. Ninguno de estos cambios cambia las señales que no se establecen en la lista. SIG_SETMASK
bloquea las señales en la lista, y desbloquea los que no están en la lista.
Por ejemplo, supongamos que la antigua lista de bloqueo era {SIGSEGV, SIGSUSP}
y usted llama sigprocmask
con estos argumentos:
sigset_t x;
sigemptyset (&x);
sigaddset(&x, SIGUSR1);
sigprocmask(SIG_BLOCK, &x, NULL)
La nueva lista de bloqueo será ahora {SIGSEGV, SIGSUSP, SIGUSR1}
.
Si llamas a sigprocmask
con estos argumentos ahora:
sigprocmask(SIG_UNBLOCK, &x, NULL)
La nueva lista de bloqueo volverá a ser {SIGSEGV, SIGSUSP}
.
Si llamas a sigprocmask
con estos argumentos ahora:
sigprocmask(SIG_SETMASK, &x, NULL)
La nueva lista de bloqueo se establecerá ahora en {SIGUSR1}
.
El argumento oldset
le dice cuál era la lista de bloqueo anterior. Si tenemos esta declaración:
sigset_t y;
Y llamamos el código en los ejemplos anteriores como este:
sigprocmask(SIG_BLOCK, &x, &y)
Ahora tenemos:
y == {SIGSEGV, SIGSUSP}
Si ahora lo hacemos:{[26]]}
sigprocmask(SIG_UNBLOCK, &x, &y)
Obtendremos {[26]]}
y == {SIGSEGV, SIGSUSP, SIGUSR1}
Y si lo hacemos:{[26]]}
sigprocmask(SIG_SET, &x, &y)
Obtendremos esto: {[26]]}
y == {SIGSEGV, SIGSUSP}
Porque este es el valor anterior del conjunto de bloqueo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-05 13:17:50