While the socket unit stays active, the manager retains the listener when this example worker replies and deliberately exits. Accept=no passes a listener; it does not force one process per connection.

Socket activation passes a listener to a compatible service

Socket activation lets systemd open a listening endpoint before the application process starts. Activity on that endpoint can then trigger a compatible service, which receives descriptors for sockets the manager already owns. The useful boundary is listener ownership versus application lifetime. An open endpoint is not yet proof that the application has initialized, accepted a request, or produced a correct response. ...

November 8, 2027 · 5 min · XB Field Notes
Fork branches from parent P to a new child C while P continues. Successful exec changes the program image within C and keeps that same child PID.

Fork creates a process; exec replaces its program

Fork followed by exec is one common Unix process-launch model. fork creates a child process, while a successful execve replaces the calling process’s program image. They solve different problems and have different inheritance rules. Understanding the distinction matters when arranging input, output, environment, and lifecycle management for a command started by another program. ...

October 12, 2027 · 5 min · XB Field Notes
A requested mode branches to ordinary umask filtering or default ACL inheritance; existing inodes follow a separate path.

Umask filters new permissions, with a default ACL exception

A process’s umask removes permission bits when creating files and directories under the ordinary mode-based creation rule. The application first supplies a requested mode; the mask restricts that request. It is neither a complete access policy nor an instruction to rewrite existing files. A directory’s default access control list changes the creation calculation, so inspecting only the process mask can give an incomplete prediction. ...

October 9, 2027 · 5 min · XB Field Notes
A producer sends stdout through a finite byte pipe to a concurrent consumer’s stdin. Its stderr branches separately to a terminal. Program buffering may still delay when bytes enter the pipe.

Shell pipes stream between processes

A shell pipeline connects one command’s standard output to the next command’s standard input. The commands can run concurrently, so the producer need not finish before the consumer starts. This supports incremental processing, but the pipe itself does not guarantee that either program processes data incrementally. Buffering, early termination, and the status of each stage determine whether the complete operation does what you intended. ...

September 28, 2027 · 5 min · XB Field Notes
A parent with exported local creates two environment copies. Child A changes local to child; child B and the parent retain local. Arrows only point toward the children.

Environment variables are a per-process thing

An environment is a collection of name-value strings supplied to a program when it starts. A child normally receives the environment selected by its parent; changing that child’s copy does not rewrite the parent’s or a sibling’s copy. This is a useful configuration boundary, but it is not a promise that the command has no side effects. The program can still modify shared files, databases, or other resources using those settings. ...

September 25, 2027 · 5 min · XB Field Notes
TERM targets group G: A exits using its default disposition while B ignores TERM and survives. C is outside the group and is not targeted. These are the article fixture outcomes.

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
In the historical article example, a shell remains at soft/hard 32/64. Its first child changes its own values to 48/64; its second child still inherits 32/64. Changes do not propagate back to the parent.

Set file limits in the process that starts the workload

A shell’s ulimit builtin changes resource limits for that shell and the processes it subsequently starts. For file descriptors, RLIMIT_NOFILE has a current soft value and a hard ceiling. Understanding where those values are inherited is essential when a terminal reports a generous limit but an independently managed service still fails to open files or accept connections. ...

July 19, 2027 · 5 min · XB Field Notes
first and dup share one open file description, while a separate open has its own description; both descriptions reference the same inode.

File descriptors name a process’s open references

A file descriptor is a small integer used within one process to refer to an open resource. The process’s descriptor table maps that number to an open file description maintained by the kernel. For a regular file, the description includes the current offset and file status flags. Another process can use the same integer for a completely different resource, so the number alone is not a global file identity. ...

February 21, 2027 · 5 min · XB Field Notes