“Conocimiento Sistemas>unix

¿Escribir un programa para encontrar todas las señales de proceso bloqueadas en la programación UNIX?

2012/9/14
Este programa utiliza la función `sigprocmask` para obtener la máscara de señal actual de un proceso. La máscara de señal representa el conjunto de señales que actualmente están bloqueadas. Luego itera a través de las señales e imprime las que están bloqueadas.

`` `C

#Include

#Include

int main () {

sigset_t blocked_signals;

int i;

// Obtener el conjunto actual de señales bloqueadas

if (sigprocmask (0, null, &blocked_signals) ==-1) {

perror ("sigprocmask");

regresar 1;

}

printf ("Señales bloqueadas:\ n");

para (i =1; i )

if (SigisMember (&Blocked_Signals, i)) {

// Verifique si la señal está bloqueada. SigisMember Devuelve 1 si es un miembro del set

printf ("señal %d ( %s) \ n", i, strsignal (i)); // strsignal convierte el número de señal en cadena

// Si Strsignal no funciona (algunos sistemas pueden no admitirlo), puede usar una tabla de búsqueda

// o imprima manualmente el número de señal.

}

}

regresar 0;

}

`` `` ``

para compilar y ejecutar este código:

1. Guardar: Guarde el código como un archivo `.c` (por ejemplo,` blocked_signals.c`).

2. Compilar: Use un compilador C (como GCC) para compilar el código:

`` `Bash

GCC blocked_signals.c -o blocked_signals

`` `` ``

3. Run: Ejecutar el programa compilado:

`` `Bash

./blocked_signals

`` `` ``

La salida enumerará los números de señal y sus nombres (si están disponibles a través de 'strsignal`) que actualmente están bloqueados para el proceso. Tenga en cuenta que el conjunto de señales bloqueadas dependerá del estado actual del proceso y de cualquier manejo de señal configurado.

Consideraciones importantes:

* Manejo de errores: El código incluye el manejo básico de errores para `Sigprocmask`. Las aplicaciones robustas deberían agregar verificaciones de error más completas.

* Nombres de señal: No se garantiza que la función 'strsignal` esté disponible en todos los sistemas o proporcione nombres para todas las señales. Es posible que deba manejar casos en los que devuelva nulo o usar una tabla de búsqueda personalizada para asignar los números de señal a los nombres.

* Números de señal: El rango de números de señal (`nsig`) depende del sistema. Por lo general, se define en ``.

* Privilegios: Obtener información sobre las señales puede requerir privilegios específicos (por ejemplo, ejecutarse como raíz). Si encuentra errores de permiso, esta podría ser la causa.

Recuerde consultar la documentación de su sistema para obtener detalles sobre el manejo de señales y las señales específicas disponibles. El comportamiento y la disponibilidad de funciones relacionadas con las señales pueden diferir ligeramente en los sistemas operativos similares a UNIX (Linux, MacOS, BSD, etc.).

unix
¿Por qué el shell no se considera al sistema operativo?
¿Cómo se crea un programa UNIX?
Cómo comprobar el uso de la CPU en Unix
¿Qué hace el comando Escribir?
¿Cuáles son las aplicaciones de Unix?
¿Cuál es el comando MV en Unix?
¿Qué empresa fabrica UNIX?
¿Qué es un formato de archivo SKD?
Conocimiento de la computadora © http://www.ordenador.online