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:
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 process
ioPriority :: 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.
The way that process attributes are handled on Posix platforms
is that we call a function just after
forkand beforeexec.This allows common actions like:
Most of these use cases are already supported by
CreateProcessinterface,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:
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.