Every named interface in the process/signals part of this book belongs to one of four layers
(IF-018). Knowing the layer tells you what guarantees you get, what portability to expect, and
which man page documents the actual contract:
Layer
What it is
Examples in this section
Kernel system call
The primitive the kernel implements; documented in man-pages section 2; raw ABI, per-arch details
User-space library function; may be a 1:1 wrapper or add behavior (threading, errno translation, reserved-signal filtering); man-pages section 3 or POSIX
raise(3), pthread_sigmask(3), sigwait(3), sigqueue(3), pthread_kill(3), the glibc signal(3)/sigaction(3) wrappers
Shell builtin
Implemented inside the shell process; obeys shell rules (job specs, jobspec operands, exit-status conventions); documented by the shell
kill in bash/dash/zsh (kill -n, kill -s, kill -SIGTERM %1)
External utility
A separate program that calls the syscall family; documented by its own project
/bin/kill from procps-ng or GNU coreutils (kill -s SIGNAL, kill -SIGNAL, kill -l, kill -t)
The per-syscall pages under syscalls/signals-time/
document syscall numbers, kernel introduction versions, and per-arch entry points; the glibc
catalog rows live in the libc ledger (ledger-glibc.md). This
section adds the application-level view: semantics, races, examples, and portability.