summaryrefslogtreecommitdiffstats
path: root/test/units/TEST-19-CGROUP.cleanup-slice.sh
blob: 5d63160334cb2705214e59a7f366590e21700d64 (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
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail

# shellcheck source=test/units/util.sh
. "$(dirname "$0")"/util.sh

export SYSTEMD_LOG_LEVEL=debug

# Create service with KillMode=none inside a slice
cat <<EOF >/run/systemd/system/test19cleanup.service
[Unit]
Description=Test 19 cleanup Service
[Service]
Slice=test19cleanup.slice
Type=exec
ExecStart=sleep infinity
KillMode=none
EOF
cat <<EOF >/run/systemd/system/test19cleanup.slice
[Unit]
Description=Test 19 cleanup Slice
EOF

# Start service
systemctl start test19cleanup.service
assert_rc 0 systemd-cgls /test19cleanup.slice

pid=$(systemctl show --property MainPID --value test19cleanup)
ps "$pid"

# Stop slice
# The sleep process will not be killed because of KillMode=none
# Since there is still a process running under it, the /test19cleanup.slice cgroup won't be removed
systemctl stop test19cleanup.slice

ps "$pid"

# Kill sleep process manually
kill -s TERM "$pid"
while kill -0 "$pid" 2>/dev/null; do sleep 0.1; done

timeout 30 bash -c 'while systemd-cgls /test19cleanup.slice/test19cleanup.service >& /dev/null; do sleep .5; done'
assert_rc 1 systemd-cgls /test19cleanup.slice/test19cleanup.service

# Check that empty cgroup /test19cleanup.slice has been removed
timeout 30 bash -c 'while systemd-cgls /test19cleanup.slice >& /dev/null; do sleep .5; done'
assert_rc 1 systemd-cgls /test19cleanup.slice