summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/sys/minherit.235
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/libc/sys/minherit.2 b/lib/libc/sys/minherit.2
index 037723019031..fb7576f94ba6 100644
--- a/lib/libc/sys/minherit.2
+++ b/lib/libc/sys/minherit.2
@@ -55,6 +55,41 @@ changes the specified pages to have the inheritance characteristic
Not all implementations will guarantee that the inheritance characteristic
can be set on a page basis;
the granularity of changes may be as large as an entire region.
+.Fx
+is capable of adjusting inheritance characteristics on a page basis.
+Inheritance only effects children created by
+.Fn fork .
+It has no effect on
+.Fn exec .
+exec'd processes replace their address space entirely. This function also
+has no effect on the parent's address space (other then to potentially
+share the address space with its children).
+.Pp
+Inheritance is a rather esoteric feature largely superceeded by the
+MAP_SHARED feature of
+.Fn mmap .
+However, it is possible to use
+.Fn minherit
+to share a block of memory between parent and child that has been mapped
+MAP_PRIVATE. That is, modifications made by parent or child are shared but
+the original underlying file is left untouched.
+.Bl -tag -width MAP_HASSEMAPHORE
+.It Dv INHERIT_SHARE
+This option causes the address space in question to be shared between
+parent and child. It has no effect on how the original underlying backing
+store was mapped.
+.It Dv INHERIT_NONE
+This option prevents the address space in question from being inherited
+at all. The address space will be unmapped in the child.
+.It Dv INHERIT_COPY
+This option causes the child to inherit the address space as copy-on-write.
+This option also has an unfortunate side effect of causing the parent
+address space to become copy-on-write when the parent forks. If the
+original mapping was MAP_SHARED, it will no longer be shared in the parent
+after the parent forks and there is no way to get the previous
+shared-backing-store mapping without unmapping and remapping the address
+space in the parent.
+.El
.Sh RETURN VALUES
.Rv -std minherit
.Sh ERRORS