Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> sistemi >> Unix >> .

Scrivi un programma per trovare tutti i segnali bloccati del processo nella programmazione UNIX?

Questo programma utilizza la funzione `Sigprocmask 'per ottenere la maschera di segnale corrente di un processo. La maschera del segnale rappresenta l'insieme di segnali attualmente bloccati. Quindi itera attraverso i segnali e stampa quelli che sono bloccati.

`` `c

#include

#include

int main () {

sigset_t blocked_signals;

int i;

// Ottieni l'attuale set di segnali bloccati

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

Perror ("Sigprocmask");

Ritorno 1;

}

printf ("segnali bloccati:\ n");

per (i =1; i )

if (Sigismember (&Blocked_sigals, i)) {

// Controlla se il segnale è bloccato. Sigismember restituisce 1 se è membro del set

printf ("segnale %d ( %s) \ n", i, strsignal (i)); // STRSIGNAL converte il numero del segnale in stringa

// Se Strsignal non funziona (alcuni sistemi potrebbero non supportarlo), è possibile utilizzare una tabella di ricerca

// o stampare manualmente il numero del segnale.

}

}

restituzione 0;

}

`` `

per compilare ed eseguire questo codice:

1. Salva: Salva il codice come file `.c` (ad esempio,` blocked_signals.c`).

2. Compila: Usa un compilatore C (come GCC) per compilare il codice:

`` `Bash

GCC blocked_signals.c -o blocked_signals

`` `

3. Run: Eseguire il programma compilato:

`` `Bash

./blocked_signals

`` `

L'output elencherà i numeri del segnale e i loro nomi (se disponibili tramite `strsignal`) che sono attualmente bloccati per il processo. Si noti che l'insieme di segnali bloccati dipenderà dallo stato corrente del processo e da qualsiasi gestione del segnale impostata.

Considerazioni importanti:

* Gestione degli errori: Il codice include la gestione degli errori di base per `Sigprocmask`. Le applicazioni robuste dovrebbero aggiungere controlli di errore più completi.

* Nomi di segnale: La funzione `Strsignal 'non è garantita per essere disponibile su tutti i sistemi o per fornire nomi per tutti i segnali. Potrebbe essere necessario gestire i casi in cui restituisce null o utilizzare una tabella di ricerca personalizzata per mappare i numeri del segnale ai nomi.

* Numeri di segnale: L'intervallo di numeri di segnale (`nsig`) dipende dal sistema. Di solito è definito in ``.

* Privilegi: Ottenere informazioni sui segnali potrebbe richiedere privilegi specifici (ad esempio, in esecuzione come root). Se riscontri errori di autorizzazione, questa potrebbe essere la causa.

Ricorda di consultare la documentazione del sistema per i dettagli sulla gestione del segnale e sui segnali specifici disponibili. Il comportamento e la disponibilità di funzioni relative ai segnali possono differire leggermente tra i sistemi operativi simili a UNIX (Linux, MacOS, BSD, ecc.).

 

sistemi © www.354353.com