Skip to content

Decreasing process priority... #281

Open
@mgajda

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:

  1. lowerCPUPriority :: Int -- lower priority of the child process
  2. ioPriority :: Int -- lower IO priority (see https://linux.die.net/man/1/ionice)
  3. 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)
  4. 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.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions