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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* Copyright 2026 The Dragonfly Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
use ;
use ;
use fs;
use ;
/// Retrieves the cgroup associated with a given process ID, supporting both cgroup v1 and v2.
///
/// This function fetches the cgroup path for the specified PID
/// and loads the corresponding cgroup hierarchy automatically.
///
/// # Arguments
///
/// * `pid` - The process ID to look up cgroups for
///
/// # Returns
///
/// * `Ok(Cgroup)` - The cgroup associated with the process
/// * `Err` - If the process doesn't exist or cgroup lookup fails
///
/// # Examples
///
/// ```rust
/// use cgroups_rs::get_cgroup_by_pid;
///
/// // Get cgroup for the current process
/// let cgroup = get_cgroup_by_pid(std::process::id()).unwrap();
/// ```
///
/// # Errors
///
/// Returns an error if:
/// - The process with the given PID does not exist
/// - Permission denied when reading cgroup information
/// - The cgroup filesystem is not mounted
/// Retrieves the cgroup v2 filesystem path for a given process ID.
///
/// This function reads the cgroup information from `/proc/{pid}/cgroup` and
/// constructs the absolute path to the cgroup v2 directory in `/sys/fs/cgroup`.
///
/// # Arguments
/// * `pid` - The process ID to query
///
/// # Returns
/// * `Ok(PathBuf)` - The absolute path to the cgroup v2 directory
/// * `Err(Error)` - If the process doesn't exist or cgroup v2 is not available
///
/// # Example
/// ```
/// let cgroup_path = get_cgroup_v2_path_by_pid(1)?;
/// // Returns something like: /sys/fs/cgroup/system.slice/service.scope
/// ```