diff options
author | Lennart Poettering <lennart@poettering.net> | 2023-02-08 18:01:26 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-02-17 14:27:58 +0100 |
commit | 6aa90884a093040ddb2dd656c1bf93892420c804 (patch) | |
tree | 78f8bf36e87f23b12b3cedf8a0af874abd3374b6 /src/basic/process-util.c | |
parent | ceecf3d45d00a176dbdbeaec8e3179b635da6f1a (diff) | |
download | systemd-6aa90884a093040ddb2dd656c1bf93892420c804.tar.gz |
process-util: add helper get_process_threads()
Let's add a proper helper for querying the number of threads in a
process.
Diffstat (limited to 'src/basic/process-util.c')
-rw-r--r-- | src/basic/process-util.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/basic/process-util.c b/src/basic/process-util.c index b6bf83c2cf..be82d0ffe7 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -1549,6 +1549,31 @@ _noreturn_ void freeze(void) { pause(); } +int get_process_threads(pid_t pid) { + _cleanup_free_ char *t = NULL; + const char *p; + int n, r; + + if (pid < 0) + return -EINVAL; + + p = procfs_file_alloca(pid, "status"); + + r = get_proc_field(p, "Threads", WHITESPACE, &t); + if (r == -ENOENT) + return proc_mounted() == 0 ? -ENOSYS : -ESRCH; + if (r < 0) + return r; + + r = safe_atoi(t, &n); + if (r < 0) + return r; + if (n < 0) + return -EINVAL; + + return n; +} + static const char *const sigchld_code_table[] = { [CLD_EXITED] = "exited", [CLD_KILLED] = "killed", |