-
Notifications
You must be signed in to change notification settings - Fork 89
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.