summaryrefslogtreecommitdiff
blob: 0615259f52f90b30ec1e902012d4b55f8610a9ed (plain)
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
51
52
53
#!/sbin/openrc-run
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

CGCONFIGPARSER="/usr/sbin/cgconfigparser"
CGCLASSIFY="/usr/sbin/cgclassify"
:	${CG_CONFIGFILE:=/etc/cgroup/cgconfig.conf}
description="Control Group Configuration Service"

start()
{
	ebegin "Setting up CGroups"
	${CGCONFIGPARSER} --load=${CG_CONFIGFILE} >/dev/null 2>&1
	eend "$?"
}

start_post()
{
	# Classify PID according to the rules if requested
	yesno "${CG_CLASSIFY}" || return 0
	ebegin "Classifying PID to CGroups"
	local pid
	for pid in $(ps --no-headers -eL o tid); do
		 ${CGCLASSIFY} ${pid}
	done
	eend "$?"
}

stop()
{
	cgconfig_umount
}

cgconfig_umount()
{
	local ctrl eq mnt_pnt mnt_pts

	while read ctrl eq mnt_pnt; do
		case "${ctrl}" in
			(\#*)    continue    ;;
			(mount*) mnt_pts=true;;
			(\}*)    mnt_pts=    ;;
			(*)
				[ -n "${mnt_pts}" ] || continue
				mnt_pnt="${mnt_pnt%;}"
				ebegin "Unmounting ${mnt_pnt}"
				umount "${mnt_pnt}"
				eend "$?"
				;;
		esac
	done < "${CG_CONFIGFILE}"
}