A POSIX signal-feldolgozást irányító rutinjait úgy tervezték, hogy azok alapvetoen signal-halmazokkal foglalkozzanak: ehhez bevezették a sigset_t adattípust, mely adattípushoz definiálták a manipulációjára használható muveleteket is. Ezek a muveletek a következok :
int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set,int sig); int sigdelset(sigset_t *set,int sig); int sigismember(sigset_t *set,int sig);
A sigemptyset() függvény az argumentumában megadott signal-halmazt üresre állítja, azaz olyan állapotúra, hogy egyetlen signal sem kerül bele. A sigfillset() függvény az argumentumában megadott signal-halmazt olyan értékure állítja be, hogy a rendszerben az összes definiált signal-típus benne legyen. A sigaddset() függvénnyel lehet az elso argumentumában megadott signal-halmazba a második argumentumban megadott signal-típust betenni; a sigdelset() függvénnyel pedig az elso argumentumában levo signal-halmazból a második argumentumában megadott signalt kivenni. A sigismember() függvény visszatérési értéke 1 (igaz), ha az elso argumentumában megadott signal-halmaz tartalmazza a második argumentumában megadott signalt.
A POSIX szabvány definiálja a maszkolt signalok fogalmát: ez egy folyamatonként (processzenként) nyilvántartott attributum, mely tartalmazza az összes olyan signalt, amelyeket a folyamat blokkolt, vagyis azokat a signalokat, amelyeknek a kiváltását a folyamat megtiltotta (az operációs rendszernek). Természetesen egy folyamatnak küldhetnek olyan signalokat, amiket az éppen blokkolt, de azoknak a kiváltásával az operációs rendszervárni fog a blokkolás befejezéséig. Az ilyen signalokat, amiket egy folyamat blokkol, de küldött már neki valaki: várakozó signaloknak is nevezik.
Az egyes signalok kezelésének mikéntjét a sigaction() rendszerhívással jelölhetjük ki. Ennek paraméterezése a következo:
int sigaction(int sig, const struct sigaction *newact, struct sigaction *oldact);
A sigaction() rendszerhívás elso argumentuma azt határozza meg, hogy melyik signal kezelését akarjuk megváltoztatni vagy lekérdezni A második argumentumban lehet kijelölni az elso argumentumban megadott signal-típus új (mostantól érvényes) kezelésmódját, illetve ott NULL pointert megadva a rendszerhívás nem módosítja a signal éppen érvényes kezelésmódját. A harmadik argumentumban (ha ott nem NULL értéket adunk át) az operációs rendszer visszaadja a signal eddigi kezelésének módjára vonatkozó információkat.
A signal-kezelés módját leíró struct sigaction struktúra felépítése a következo:
struct sigaction { void (*sa_handler)(); sigset_t sa_mask; int sa_flags; };
Az sa_handler komponense értéke vagy a SIG_IGN vagy SIG_DFL szimbolikus konstansok valamelyike (lásd részletesebben a 3.5.2 pontot), vagy pedig a signal-kezelo függvény címe lehet. Ha egy signal-kezelo függvény van az sa_handler komponensben, akkor az sa_mask komponens a signal-kezelo függvény futása alatt a még maszkolandó signalok halmazát kell, hogy tartalmazza (vagyis a signal-kezelo futásakor a maszkolt signalok halmaza ki fog bovülni az sa_mask halmazban megadott signalokkal, a signal-kezelo lefutásának végéig). Az éppen kiváltott signal automatikusan belekerül az sa_mask halmazba, így azt nem kell belerakni abba. Az sa_flags a signal-kezelés folyamatát befolyásolja, és a POSIX az egyetlen SA_NOCLDSTOP lehetséges flaget definiálja a következoképpen: ha ez be van állítva, akkor az operációs rendszer nem fog SIGCHLD signalt generálni olyankor, amikot a folyamat valamely gyermek-folyamatának felfüggesztodik vagy tovább folytatódik a futása.
Lehetoség van az éppen maszkolt signalok halmazának lekérdezésére és módosítására is: erre használható a sigprocmask() rendszerhívás. Ennek prototípusa a következo:
int sigprocmask(int hogyan, const sigset_t *newset, sigset_t *oldset);
Az elso argumentum értéke háromféle lehet: vagy SIG_BLOCK vagy SIG_UNBLOCK vagy pedig SIG_SETMASK. SIG_BLOCK érték esetén a második ( newset) argumentumban levo signalok hozzáadódnak a maszkolt signalok halmazához. SIG_UNBLOCK esetén a második argumentumban levo signalok ki lesznek véve a maszkolt signalok halmazából, míg a SIG_SETMASK esetén a maszkolt signalok halmazát newset-re állítja az operációs rendszer, az addigi tartalmától függetlenül. Ha a newset argumentum értéke NULL, akkor a maszkolt signalok halmaza nem módosul. Ha az oldset argumentum értéke nem NULL, akkor az általa kijelölt helyre az operációs rendszer eltárolja az éppen maszkolt signalok halmazát.
A POSIX definálja még a sigpending() illetve a sigsuspend() rendszerhívásokat is: ez elobbivel egy folyamat lekérdezheti a számára küldött, de várakozó signalok halmazát; míg a sigsuspend() függvénnyel a maszkolt signalok halmaza módosítható, majd az operációs rendszer a folyamat futását felfüggeszti addig, amíg legközelebb egy signalt nem kap.