Description
The way that process attributes are handled on Posix platforms
is that we call a function just after fork
and before exec
.
This allows common actions like:
- decreasing process CPU priority and IO priority
- dropping security capabilities
- closing FDs
- detaching process group
Most of these use cases are already supported by CreateProcess
interface,
however decreasing priority, and dropping capabilities is not supported.
I suggest adding new fields to CreateProcess
:
lowerCPUPriority :: Int
-- lower priority of the child processioPriority :: Int
-- lower IO priority (see https://linux.die.net/man/1/ionice)dropCapabilities :: [Capability]
-- drop process capabilities (see https://hackage.haskell.org/package/linux-capabilities-0.1.1.0/docs/System-Linux-Capabilities.html for a list of capabilities, and https://man7.org/linux/man-pages/man7/capabilities.7.html for explanations)changeNamespace :: NamespaceChange
(see https://en.wikipedia.org/wiki/Linux_namespaces)
With additional datatype:data NamespaceChange = SameNamespace | CloneNamespace [Unshare] | EnterNamespace FD
Use cases for 1 and 2 are particularly common when managing batch jobs from user interface.
Facilitation would help all interactive applications, in particular language server.
Facilitating 3 and 4 would encourage using Haskell for high-security applications, since both capabilties and namespaces are used for secure containers.
I am willing to provide MR, if maintainers accept.
The numbers above indicate both simplicity and frequency with which new features are likely to be used.