process(7)

MILESTONE-QUALIFIED Rendered from the page's mdoc source at milestone/general-usability-qemu-20260927 (platform ff025b1) with GNU groff version 1.23.0, using the same command the image build uses; an ABSD session running man 7 process prints this text. It is dated 2026-09-27; the build commands and repository files it mentions are in private sources, and later work is not in it. All pages.

PROCESS(7)              Miscellaneous Information Manual            PROCESS(7)

NAME
       process -- processes, starting programs, waiting, and parentage on ABSD

DESCRIPTION
       A process is an address space, a table of handles (handles(7)), a PID,
       a parent, and exactly one task: there are no threads.  PIDs are not
       reused within a boot; process table slots are.  There are sixteen slots
       in the whole system.

   Starting a program
       A new program is always a new process.  There is no fork() and no
       exec() that replaces a running program.  To run a program from the
       filesystem, the parent reads the whole file with its own filesystem
       authority and hands the bytes to the kernel, which checks and loads
       them into a new process (spawn_image()).  The file must be a static
       x86-64 ELF executable of at most 32 MiB: no dynamic linking, no
       interpreter, no `#!' scripts.  There is no execute permission; what
       stands in for it is the spawn right, a per-process attribute without
       which every start is refused.  Nothing restores it once withheld.

       The child starts with an ordered set of handles copied from the parent,
       never with more rights than the parent's copy, and a startup record on
       its first handle carrying its arguments, environment, working
       directory, and program name.  Its standard input, output, and error are
       kernel pipes (or the parent's own streams, copied); there are no file
       descriptors.  Everything else about its authority is in handles(7).

   Waiting and killing
       Starting a child gives the parent a process handle with the wait and
       kill rights.  With it the parent can wait for the child to end, which
       collects its outcome and frees its slot (reaping), or kill it: the
       child ends at once, wherever it was blocked, and everything it held is
       released.  A process ends in one of three ways: it exits with a status,
       it faults (the kernel records the vector and address), or it is killed.
       In a shell, a fault or kill is reported as status 128.

       There are no signals.  Nothing interrupts a process from outside except
       its parent's kill.  ^C on a session's terminal is not delivered to any
       process: the SSH server tells the session's shell on a control channel
       of its own, and the shell, the parent, kills its running commands; see
       absd-sh(1).  A write to a pipe whose readers are all gone fails with a
       broken-pipe error; it does not stop the writer.

   Parentage
       The parent is the process that started the child; nothing else is.
       When a process ends, its children are reparented to init (orphan
       adoption).  Adoption grants init no handle and no authority over them;
       it lets init reap them when they end.  There is no process-tree kill:
       ending a process does not end its children.

       In an SSH session the tree is: sshd starts the session's shell (or, for
       `ssh host command', that command); the shell starts the commands you
       type.  When the client disconnects, sshd kills and reaps the session's
       first process.  Commands the shell started are the shell's children,
       not sshd's: they are adopted by init and run to their own end, when
       init reaps them.  Until then their standard input reads end of file,
       their writes to the terminal fail, and the file server refuses their
       channel; they keep the spawn right.

   What a process can see
       A process can inspect itself and, through the process handles it holds,
       its own children, and nothing else.  There is no list of all processes.
       A session's listing, ps(1), is the SSH server's answer for that session
       alone: it names the session's shell, which it holds a handle to, and
       counts what else holds the session's input and filesystem channels.
       There is no kill command: only a parent ends a child.

   Replacement is not recovery
       Starting a new instance of a program after an earlier one ended is a
       restart, and the new instance is a replacement.  A replacement is not a
       recovery: recovery is claimed only once the replacement has read the
       state the earlier instance left and reconciled it.

       In the qualified boot nothing is restarted.  If the SSH server ends, or
       the file server ends while the SSH server runs, the boot ends and is
       reported failed.  A policy for replacing either in a long-running boot
       is not defined yet.

SEE ALSO
       absd-sh(1), ps(1), filesystem(7), handles(7)

       In the kernel repository: docs/PROCESS-STARTUP.md (the start contract
       and the startup record) and docs/TERMINOLOGY.md.

CAVEATS
       Interrupting a command ends that command only; programs it started keep
       running, adopted by init, with whatever of the session they hold.
       Sixteen processes are few: init, the file server, and the SSH server
       take three, and each open shell running a pipeline takes one per
       command.

ABSD                          September 27, 2026                    PROCESS(7)

All manual pages