-
Notifications
You must be signed in to change notification settings - Fork 85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Decreasing process priority... #281
Comments
@bgamari any thoughts on this? I lean towards saying this makes sense, but you're more familiar with the POSIX APIs than I am. |
The problem is that this isn't strictly true at this point. At least one widely used UNIX-like platform (Darwin) has been strongly pushing users against using This puts us in a tricky position: do we want |
I think we're stuck with the portability interface because even if we stick to POSIX we still need to deal with e.g. FreeBSD, which doesn't use the same capability and namespace abstractions as Linux. And of course Darwin which does its own thing, as usual. That said, the problem with separating this out is that it just defers the problem; I'm tempted to suggest making the current |
On second thought, we already have multiple POSIXisms and multiple Windowsisms in |
The way that process attributes are handled on Posix platforms
is that we call a function just after
fork
and beforeexec
.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 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.
The text was updated successfully, but these errors were encountered: