Add rlimits to /proc/<PID>/status
PATCH 1/1 Add rlimits to /proc/<PID>/status
Signed-off-by Clifford Wolf <[email protected]>
--- fs/proc/array.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-)
fs/proc/array.c +57 -0
@@ -242,6 +242,62 @@ static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, } } +static const char *rlim_names[RLIM_NLIMITS ] = { + [RLIMIT_CPU ] ="CPU" , + [RLIMIT_FSIZE ] ="FSize" , + [RLIMIT_DATA ] ="Data" , + [RLIMIT_STACK ] ="Stack" , + [RLIMIT_CORE ] ="Core" , + [RLIMIT_RSS ] ="RSS" , + [RLIMIT_NPROC ] ="NProc" , + [RLIMIT_NOFILE ] ="NoFile" , + [RLIMIT_MEMLOCK ] ="MemLock" , + [RLIMIT_AS ] ="AddrSpace" , + [RLIMIT_LOCKS ] ="Locks" , + [RLIMIT_SIGPENDING ] ="SigPending" , + [RLIMIT_MSGQUEUE ] ="MsgQueue" , + [RLIMIT_NICE ] ="Nice" , + [RLIMIT_RTPRIO ] ="RTPrio" , + [RLIMIT_RTTIME ] ="RTTime" +}; + +#if RLIM_NLIMITS !=16 +# error Value of RLIM_NLIMITS changed. \ + Please update rlim_names in fs/proc/array.c +#endif + +static inline void task_rlim (struct seq_file *m,struct task_struct *p) +{ +unsigned long flags; +struct rlimit rlim[RLIM_NLIMITS ]; +int i; + +for (i=0 ; i<RLIM_NLIMITS ; i++) { + rlim[i].rlim_cur =0 ; + rlim[i].rlim_max =0 ; + } + +rcu_read_lock (); +if (lock_task_sighand (p, &flags)) { +for (i=0 ; i<RLIM_NLIMITS ; i++) + rlim[i] = p->signal->rlim[i]; +unlock_task_sighand (p, &flags); + } +rcu_read_unlock (); + +for (i=0 ; i<RLIM_NLIMITS ; i++) { +seq_printf (m,"Rlim%s:\t" , rlim_names[i]); +if (rlim[i].rlim_cur !=RLIM_INFINITY ) +seq_printf (m,"%lu\t" , rlim[i].rlim_cur); +else +seq_printf (m,"inf\t" ); +if (rlim[i].rlim_max !=RLIM_INFINITY ) +seq_printf (m,"%lu\n" , rlim[i].rlim_max); +else +seq_printf (m,"inf\n" ); + } +} +static inline void task_sig (struct seq_file *m,struct task_struct *p) {unsigned long flags;
@@ -322,6 +378,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,task_mem (m, mm);mmput (mm); } +task_rlim (m, task);task_sig (m, task);task_cap (m, task);cpuset_task_status_allowed (m, task);
Signature · 1 line
1.5.5.3
Aren't they better staying in /proc/<PID>/limits?
Hugh
Hi,
Quoted 1 line · Hugh Dickins
Aren't they better staying in /proc/<PID>/limits?
this was a cleanup of a patch I've sent to lkml about 6 months ago when there was no yet-released (non-rc) kernel with /proc/<PID>/limits ...
my patch is a more or less duplicate of commit d85f50d5. oops. please simply ignore it.. ;-)
yours,
- clifford
Signature · 3 lines
A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."
Quoted 21 lines · Clifford Wolf
Signed-off-by Clifford Wolf <[email protected]>--- fs/proc/array.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-)fs/proc/array.c +8
-0@@ -242,6 +242,62 @@ static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, } } +static const char *rlim_names[RLIM_NLIMITS ] = { + [RLIMIT_CPU ] ="CPU" , + [RLIMIT_FSIZE ] ="FSize" , + [RLIMIT_DATA ] ="Data" , + [RLIMIT_STACK ] ="Stack" , + [RLIMIT_CORE ] ="Core" , + [RLIMIT_RSS ] ="RSS" , + [RLIMIT_NPROC ] ="NProc" ,
fs/proc/array.c static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, · line 262
Quoted 10 lines
fs/proc/array.c +10
-0+ [RLIMIT_NOFILE] = "NoFile", + [RLIMIT_MEMLOCK] = "MemLock", + [RLIMIT_AS] = "AddrSpace", + [RLIMIT_LOCKS] = "Locks", + [RLIMIT_SIGPENDING] = "SigPending", + [RLIMIT_MSGQUEUE] = "MsgQueue", + [RLIMIT_NICE] = "Nice", + [RLIMIT_RTPRIO] = "RTPrio", + [RLIMIT_RTTIME] = "RTTime" +};
fs/proc/base.c already has an array with strings in it