]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/basic/process-util.c
process-util: add helper get_process_threads()
[thirdparty/systemd.git] / src / basic / process-util.c
index b6bf83c2cfdf498eefc67937d1ff78804a2f5788..be82d0ffe71fab65a8ded2ff316fde946c0ff16c 100644 (file)
@@ -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",