File: rlimit_linux.go

package info (click to toggle)
golang-github-opencontainers-runtime-tools 0.9.0.109.ge931285-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,212 kB
  • sloc: sh: 559; makefile: 90
file content (50 lines) | stat: -rw-r--r-- 1,660 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package main

import "fmt"

// These values map to rlimit constants defined in linux
const (
	RlimitCPU        = iota // CPU time in sec
	RlimitFsize             // Maximum filesize
	RlimitData              // max data size
	RlimitStack             // max stack size
	RlimitCore              // max core file size
	RlimitRss               // max resident set size
	RlimitNproc             // max number of processes
	RlimitNofile            // max number of open files
	RlimitMemlock           // max locked-in-memory address space
	RlimitAs                // address space limit
	RlimitLocks             // maximum file locks held
	RlimitSigpending        // max number of pending signals
	RlimitMsgqueue          // maximum bytes in POSIX mqueues
	RlimitNice              // max nice prio allowed to raise to
	RlimitRtprio            // maximum realtime priority
	RlimitRttime            // timeout for RT tasks in us
)

var rlimitMap = map[string]int{
	"RLIMIT_CPU":       RlimitCPU,
	"RLIMIT_FSIZE":     RlimitFsize,
	"RLIMIT_DATA":      RlimitData,
	"RLIMIT_STACK":     RlimitStack,
	"RLIMIT_CORE":      RlimitCore,
	"RLIMIT_RSS":       RlimitRss,
	"RLIMIT_NPROC":     RlimitNproc,
	"RLIMIT_NOFILE":    RlimitNofile,
	"RLIMIT_MEMLOCK":   RlimitMemlock,
	"RLIMIT_AS":        RlimitAs,
	"RLIMIT_LOCKS":     RlimitLocks,
	"RLIMIT_SGPENDING": RlimitSigpending,
	"RLIMIT_MSGQUEUE":  RlimitMsgqueue,
	"RLIMIT_NICE":      RlimitNice,
	"RLIMIT_RTPRIO":    RlimitRtprio,
	"RLIMIT_RTTIME":    RlimitRttime,
}

func strToRlimit(key string) (int, error) {
	rl, ok := rlimitMap[key]
	if !ok {
		return 0, fmt.Errorf("Wrong rlimit value: %s", key)
	}
	return rl, nil
}