git: cc4cee6cc27d - stable/14 - procstat(1): add rlimitusage subcommand
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 05 Oct 2024 07:11:29 UTC
The branch stable/14 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=cc4cee6cc27de8e51295c30b8d71d43032b00cf0
commit cc4cee6cc27de8e51295c30b8d71d43032b00cf0
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-09-22 17:55:14 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-10-05 07:08:56 +0000
procstat(1): add rlimitusage subcommand
(cherry picked from commit 5ac9320ddf50702e4fe05c10adc46dcdbd8ed5ee)
---
usr.bin/procstat/Makefile | 1 +
usr.bin/procstat/procstat.c | 2 +
usr.bin/procstat/procstat.h | 2 +
usr.bin/procstat/procstat_rlimitusage.c | 76 +++++++++++++++++++++++++++++++++
4 files changed, 81 insertions(+)
diff --git a/usr.bin/procstat/Makefile b/usr.bin/procstat/Makefile
index cd62c6a96674..cfd8578c0dbc 100644
--- a/usr.bin/procstat/Makefile
+++ b/usr.bin/procstat/Makefile
@@ -17,6 +17,7 @@ SRCS= procstat.c \
procstat_ptlwpinfo.c \
procstat_pwdx.c \
procstat_rlimit.c \
+ procstat_rlimitusage.c \
procstat_rusage.c \
procstat_sigs.c \
procstat_threads.c \
diff --git a/usr.bin/procstat/procstat.c b/usr.bin/procstat/procstat.c
index 445ea213ba2a..120a377bc756 100644
--- a/usr.bin/procstat/procstat.c
+++ b/usr.bin/procstat/procstat.c
@@ -116,6 +116,8 @@ static const struct procstat_cmd cmd_table[] = {
PS_CMP_NORMAL },
{ "rlimit", "rlimit", NULL, &procstat_rlimit, &cmdopt_none,
PS_CMP_NORMAL },
+ { "rlimitusage", "rlimitusage", NULL, &procstat_rlimitusage,
+ &cmdopt_none, PS_CMP_NORMAL },
{ "rusage", "rusage", "[-Ht]", &procstat_rusage, &cmdopt_rusage,
PS_CMP_NORMAL },
{ "sigfastblock", "sigfastblock", NULL, &procstat_sigfastblock,
diff --git a/usr.bin/procstat/procstat.h b/usr.bin/procstat/procstat.h
index 0c138fa88d42..f106fac79127 100644
--- a/usr.bin/procstat/procstat.h
+++ b/usr.bin/procstat/procstat.h
@@ -65,6 +65,8 @@ void procstat_cs(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_env(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_files(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_kstack(struct procstat *prstat, struct kinfo_proc *kipp);
+void procstat_rlimitusage(struct procstat *procstat,
+ struct kinfo_proc *kipp);
void procstat_pargs(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_penv(struct procstat *prstat, struct kinfo_proc *kipp);
void procstat_ptlwpinfo(struct procstat *prstat, struct kinfo_proc *kipp);
diff --git a/usr.bin/procstat/procstat_rlimitusage.c b/usr.bin/procstat/procstat_rlimitusage.c
new file mode 100644
index 000000000000..f589edd23b02
--- /dev/null
+++ b/usr.bin/procstat/procstat_rlimitusage.c
@@ -0,0 +1,76 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 The FreeBSD Foundation
+ *
+ * This software was developed by Konstantin Belousov <kib@FreeBSD.org>
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#define _RLIMIT_IDENT
+#include <sys/resource.h>
+#include <sys/user.h>
+
+#include <err.h>
+#include <errno.h>
+#include <libprocstat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <libutil.h>
+
+#include "procstat.h"
+
+static const char ru[] = "resource_usage";
+
+void
+procstat_rlimitusage(struct procstat *procstat, struct kinfo_proc *kipp)
+{
+ rlim_t *resuse;
+ unsigned int cnt, i;
+
+ if ((procstat_opts & PS_OPT_NOHEADER) == 0)
+ xo_emit("{T:/%7s %12s %4s %18s}\n",
+ "PID", "RESOURCE", "ID", "USAGE");
+
+ xo_emit("{ek:process_id/%d}", kipp->ki_pid);
+
+ resuse = procstat_getrlimitusage(procstat, kipp, &cnt);
+ if (resuse == NULL)
+ return;
+ xo_open_list(ru);
+ for (i = 0; i < cnt; i++) {
+ xo_open_instance(ru);
+ xo_emit("{dk:process_id/%7d} ", kipp->ki_pid);
+ xo_emit("{:resource/%12s} ", i < nitems(rlimit_ident) ?
+ rlimit_ident[i] : "unknown");
+ xo_emit("{:resid/%4d} ", i);
+ xo_emit("{:usage/%18jd}\n", (intmax_t)resuse[i]);
+ xo_close_instance(ru);
+ }
+ xo_close_list(ru);
+ procstat_freerlimitusage(procstat, resuse);
+}