1*598585e8SMikolaj Golub /*- 2*598585e8SMikolaj Golub * Copyright (c) 2011 Mikolaj Golub 3*598585e8SMikolaj Golub * All rights reserved. 4*598585e8SMikolaj Golub * 5*598585e8SMikolaj Golub * Redistribution and use in source and binary forms, with or without 6*598585e8SMikolaj Golub * modification, are permitted provided that the following conditions 7*598585e8SMikolaj Golub * are met: 8*598585e8SMikolaj Golub * 1. Redistributions of source code must retain the above copyright 9*598585e8SMikolaj Golub * notice, this list of conditions and the following disclaimer. 10*598585e8SMikolaj Golub * 2. Redistributions in binary form must reproduce the above copyright 11*598585e8SMikolaj Golub * notice, this list of conditions and the following disclaimer in the 12*598585e8SMikolaj Golub * documentation and/or other materials provided with the distribution. 13*598585e8SMikolaj Golub * 14*598585e8SMikolaj Golub * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*598585e8SMikolaj Golub * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*598585e8SMikolaj Golub * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*598585e8SMikolaj Golub * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*598585e8SMikolaj Golub * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*598585e8SMikolaj Golub * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*598585e8SMikolaj Golub * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*598585e8SMikolaj Golub * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*598585e8SMikolaj Golub * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*598585e8SMikolaj Golub * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*598585e8SMikolaj Golub * SUCH DAMAGE. 25*598585e8SMikolaj Golub * 26*598585e8SMikolaj Golub * $FreeBSD$ 27*598585e8SMikolaj Golub */ 28*598585e8SMikolaj Golub 29*598585e8SMikolaj Golub #include <sys/param.h> 30*598585e8SMikolaj Golub #include <sys/time.h> 31*598585e8SMikolaj Golub #define _RLIMIT_IDENT 32*598585e8SMikolaj Golub #include <sys/resourcevar.h> 33*598585e8SMikolaj Golub #include <sys/sysctl.h> 34*598585e8SMikolaj Golub #include <sys/user.h> 35*598585e8SMikolaj Golub 36*598585e8SMikolaj Golub #include <err.h> 37*598585e8SMikolaj Golub #include <errno.h> 38*598585e8SMikolaj Golub #include <libprocstat.h> 39*598585e8SMikolaj Golub #include <limits.h> 40*598585e8SMikolaj Golub #include <stdio.h> 41*598585e8SMikolaj Golub #include <stdlib.h> 42*598585e8SMikolaj Golub #include <string.h> 43*598585e8SMikolaj Golub 44*598585e8SMikolaj Golub #include "procstat.h" 45*598585e8SMikolaj Golub 46*598585e8SMikolaj Golub static struct rlimit rlimit[RLIM_NLIMITS]; 47*598585e8SMikolaj Golub 48*598585e8SMikolaj Golub void 49*598585e8SMikolaj Golub procstat_rlimit(struct kinfo_proc *kipp) 50*598585e8SMikolaj Golub { 51*598585e8SMikolaj Golub int error, i, name[4]; 52*598585e8SMikolaj Golub size_t len; 53*598585e8SMikolaj Golub 54*598585e8SMikolaj Golub if (!hflag) 55*598585e8SMikolaj Golub printf("%5s %-16s %-10s %12s %12s\n", "PID", "COMM", "RLIMIT", 56*598585e8SMikolaj Golub "CURRENT", "MAX"); 57*598585e8SMikolaj Golub name[0] = CTL_KERN; 58*598585e8SMikolaj Golub name[1] = KERN_PROC; 59*598585e8SMikolaj Golub name[2] = KERN_PROC_RLIMIT; 60*598585e8SMikolaj Golub name[3] = kipp->ki_pid; 61*598585e8SMikolaj Golub len = sizeof(rlimit); 62*598585e8SMikolaj Golub error = sysctl(name, 4, rlimit, &len, NULL, 0); 63*598585e8SMikolaj Golub if (error < 0 && errno != ESRCH) { 64*598585e8SMikolaj Golub warn("sysctl: kern.proc.rlimit: %d", kipp->ki_pid); 65*598585e8SMikolaj Golub return; 66*598585e8SMikolaj Golub } 67*598585e8SMikolaj Golub if (error < 0 || len != sizeof(rlimit)) 68*598585e8SMikolaj Golub return; 69*598585e8SMikolaj Golub 70*598585e8SMikolaj Golub for (i = 0; i < RLIM_NLIMITS; i++) { 71*598585e8SMikolaj Golub printf("%5d %-16s %-10s %12jd %12jd\n", kipp->ki_pid, 72*598585e8SMikolaj Golub kipp->ki_comm, rlimit_ident[i], 73*598585e8SMikolaj Golub rlimit[i].rlim_cur == RLIM_INFINITY ? 74*598585e8SMikolaj Golub -1 : rlimit[i].rlim_cur, 75*598585e8SMikolaj Golub rlimit[i].rlim_max == RLIM_INFINITY ? 76*598585e8SMikolaj Golub -1 : rlimit[i].rlim_max); 77*598585e8SMikolaj Golub } 78*598585e8SMikolaj Golub } 79