A group still contains a live member after its leader exits, while another child remains outside the signal target.

Process groups select signal recipients, not a family tree

A process group is a kernel-maintained set of processes identified by a process group ID, or PGID. It provides a target for operations such as delivering a signal to a job. Parent-child relationships and group membership are separate: related processes can occupy different groups, and a group’s leader does not need to remain alive for other members to continue belonging to it. ...

September 24, 2027 · 5 min · XB Field Notes
A small hook that runs a command instead of the default act of dying for a signal.

Shell traps turn a signal into a cleanup step

A trap lets a shell arrange an action for a signal or a shell event. It is useful for removing temporary files and coordinating shutdown, but it does not make interruption atomic or guarantee cleanup under every termination. In Bash, trap is a builtin, and EXIT is a shell event rather than an operating system signal. A reliable design names the exits it handles and preserves evidence of why execution stopped. ...

January 12, 2027 · 4 min · XB Field Notes
Blocked standard signals can merge, while termination cleanup depends on the program’s installed behavior.

A signal has a disposition, a mask, and delivery rules

Signals notify processes or threads of events using kernel-defined delivery rules. A signal’s disposition selects a default action, an installed handler, or ignoring it where permitted. A thread’s mask can block delivery of eligible signals while they remain pending. Separating disposition, masking, and pending state is essential when a program appears to miss repeated notifications or fails to stop as expected. ...

November 23, 2026 · 5 min · XB Field Notes