pid-ns-init: Carry the autogroup's nice value into the new session

Closes: https://github.com/gentoo/portage/pull/693
Signed-off-by: Florian Schmaus <flo@geekplace.eu>
Signed-off-by: Zac Medico <zmedico@gentoo.org>
diff --git a/bin/pid-ns-init b/bin/pid-ns-init
index e410dd0..c8e82bd 100644
--- a/bin/pid-ns-init
+++ b/bin/pid-ns-init
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# Copyright 2018-2020 Gentoo Authors
+# Copyright 2018-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
@@ -12,6 +12,7 @@
 import sys
 import termios
 
+from pathlib import Path
 
 KILL_SIGNALS = (
 	signal.SIGINT,
@@ -91,9 +92,28 @@
 			'preexec_fn': functools.partial(preexec_fn, uid, gid, groups, umask),
 			'pass_fds': pass_fds,
 		}
+
+		# Try to obtain the current autogroup's nice value.
+		autogroup_nice = None
+		autogroup_file = Path("/proc/self/autogroup")
+		try:
+			f = autogroup_file.open("r")
+		except EnvironmentError:
+			pass
+		else:
+			with f:
+				line = f.readline()
+				autogroup_nice = line.split(" ")[2]
+
 		# Isolate parent process from process group SIGSTOP (bug 675870)
 		setsid = True
 		os.setsid()
+
+		if autogroup_nice:
+			# Set the previously obtained autogroup nice value again,
+			# since we created a new session with os.setsid() above.
+			autogroup_file.write_text(autogroup_nice)
+
 		if sys.stdout.isatty():
 			try:
 				fcntl.ioctl(sys.stdout, termios.TIOCSCTTY, 0)