*** empty log message ***
This commit is contained in:
@@ -309,12 +309,16 @@ main (int argc, char *argv [])
|
||||
glibtop_get_proc_signal (&data.proc_signal, pid);
|
||||
|
||||
printf ("Proc_Signal PID %5d (0x%08lx): "
|
||||
"%lu %lu %lu %lu\n", (int) pid,
|
||||
"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
|
||||
(unsigned long) data.proc_signal.flags,
|
||||
(unsigned long) data.proc_signal.signal,
|
||||
(unsigned long) data.proc_signal.blocked,
|
||||
(unsigned long) data.proc_signal.sigignore,
|
||||
(unsigned long) data.proc_signal.sigcatch);
|
||||
(unsigned long) data.proc_signal.signal [0],
|
||||
(unsigned long) data.proc_signal.signal [1],
|
||||
(unsigned long) data.proc_signal.blocked [0],
|
||||
(unsigned long) data.proc_signal.blocked [1],
|
||||
(unsigned long) data.proc_signal.sigignore [0],
|
||||
(unsigned long) data.proc_signal.sigignore [1],
|
||||
(unsigned long) data.proc_signal.sigcatch [0],
|
||||
(unsigned long) data.proc_signal.sigcatch [1]);
|
||||
|
||||
for (c = 0; c < PROFILE_COUNT; c++)
|
||||
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
||||
@@ -419,12 +423,17 @@ main (int argc, char *argv [])
|
||||
for (c = 0; c < PROFILE_COUNT; c++)
|
||||
glibtop_get_proc_signal (&data.proc_signal, ppid);
|
||||
|
||||
printf ("Proc_Signal PPID %5d (0x%08lx): %lu %lu %lu %lu\n",
|
||||
printf ("Proc_Signal PPID %5d (0x%08lx): "
|
||||
"%lx %lx %lx %lx %lx %lx %lx %lx\n",
|
||||
(int) ppid, (unsigned long) data.proc_signal.flags,
|
||||
(unsigned long) data.proc_signal.signal,
|
||||
(unsigned long) data.proc_signal.blocked,
|
||||
(unsigned long) data.proc_signal.sigignore,
|
||||
(unsigned long) data.proc_signal.sigcatch);
|
||||
(unsigned long) data.proc_signal.signal [0],
|
||||
(unsigned long) data.proc_signal.signal [1],
|
||||
(unsigned long) data.proc_signal.blocked [0],
|
||||
(unsigned long) data.proc_signal.blocked [1],
|
||||
(unsigned long) data.proc_signal.sigignore [0],
|
||||
(unsigned long) data.proc_signal.sigignore [1],
|
||||
(unsigned long) data.proc_signal.sigcatch [0],
|
||||
(unsigned long) data.proc_signal.sigcatch [1]);
|
||||
|
||||
for (c = 0; c < PROFILE_COUNT; c++)
|
||||
glibtop_get_proc_kernel (&data.proc_kernel, ppid);
|
||||
@@ -530,12 +539,16 @@ main (int argc, char *argv [])
|
||||
glibtop_get_proc_signal (&data.proc_signal, 1);
|
||||
|
||||
printf ("Proc_Signal INIT %5d (0x%08lx): "
|
||||
"%lu %lu %lu %lu\n", 1,
|
||||
"%lx %lx %lx %lx %lx %lx %lx %lx\n", 1,
|
||||
(unsigned long) data.proc_signal.flags,
|
||||
(unsigned long) data.proc_signal.signal,
|
||||
(unsigned long) data.proc_signal.blocked,
|
||||
(unsigned long) data.proc_signal.sigignore,
|
||||
(unsigned long) data.proc_signal.sigcatch);
|
||||
(unsigned long) data.proc_signal.signal [0],
|
||||
(unsigned long) data.proc_signal.signal [1],
|
||||
(unsigned long) data.proc_signal.blocked [0],
|
||||
(unsigned long) data.proc_signal.blocked [1],
|
||||
(unsigned long) data.proc_signal.sigignore [0],
|
||||
(unsigned long) data.proc_signal.sigignore [1],
|
||||
(unsigned long) data.proc_signal.sigcatch [0],
|
||||
(unsigned long) data.proc_signal.sigcatch [1]);
|
||||
|
||||
for (c = 0; c < PROFILE_COUNT; c++)
|
||||
glibtop_get_proc_kernel (&data.proc_kernel, 1);
|
||||
|
@@ -116,12 +116,16 @@ output (pid_t pid)
|
||||
glibtop_get_proc_signal (&data.proc_signal, pid);
|
||||
|
||||
printf ("Proc_Signal PID %5d (0x%08lx): "
|
||||
"%lu %lu %lu %lu\n", (int) pid,
|
||||
"%lx %lx %lx %lx %lx %lx %lx %lx\n", (int) pid,
|
||||
(unsigned long) data.proc_signal.flags,
|
||||
(unsigned long) data.proc_signal.signal,
|
||||
(unsigned long) data.proc_signal.blocked,
|
||||
(unsigned long) data.proc_signal.sigignore,
|
||||
(unsigned long) data.proc_signal.sigcatch);
|
||||
(unsigned long) data.proc_signal.signal [0],
|
||||
(unsigned long) data.proc_signal.signal [1],
|
||||
(unsigned long) data.proc_signal.blocked [0],
|
||||
(unsigned long) data.proc_signal.blocked [1],
|
||||
(unsigned long) data.proc_signal.sigignore [0],
|
||||
(unsigned long) data.proc_signal.sigignore [1],
|
||||
(unsigned long) data.proc_signal.sigcatch [0],
|
||||
(unsigned long) data.proc_signal.sigcatch [1]);
|
||||
|
||||
glibtop_get_proc_kernel (&data.proc_kernel, pid);
|
||||
|
||||
|
@@ -58,6 +58,7 @@ static libgtop_proc_state_t libgtop_proc_state;
|
||||
static libgtop_proc_kernel_t libgtop_proc_kernel;
|
||||
static libgtop_proc_segment_t libgtop_proc_segment;
|
||||
static libgtop_proc_mem_t libgtop_proc_mem;
|
||||
static libgtop_proc_signal_t libgtop_proc_signal;
|
||||
|
||||
static ctl_table libgtop_table[];
|
||||
static ctl_table libgtop_root_table[] = {
|
||||
@@ -89,6 +90,8 @@ ctl_table libgtop_table[] = {
|
||||
sizeof (libgtop_proc_segment), 0444, NULL, NULL, &proc_ctl_handler},
|
||||
{LIBGTOP_PROC_MEM, NULL, &libgtop_proc_mem,
|
||||
sizeof (libgtop_proc_mem), 0444, NULL, NULL, &proc_ctl_handler},
|
||||
{LIBGTOP_PROC_SIGNAL, NULL, &libgtop_proc_signal,
|
||||
sizeof (libgtop_proc_signal), 0444, NULL, NULL, &proc_ctl_handler},
|
||||
{0}
|
||||
};
|
||||
|
||||
@@ -467,6 +470,48 @@ get_statm (struct task_struct *tsk, libgtop_proc_mem_t *proc_mem)
|
||||
proc_mem->dt = dt;
|
||||
}
|
||||
|
||||
static void
|
||||
collect_sigign_sigcatch (struct task_struct *p, sigset_t *ign,
|
||||
sigset_t *catch)
|
||||
{
|
||||
struct k_sigaction *k;
|
||||
int i;
|
||||
|
||||
sigemptyset(ign);
|
||||
sigemptyset(catch);
|
||||
|
||||
if (p->sig) {
|
||||
k = p->sig->action;
|
||||
for (i = 1; i <= _NSIG; ++i, ++k) {
|
||||
if (k->sa.sa_handler == SIG_IGN)
|
||||
sigaddset(ign, i);
|
||||
else if (k->sa.sa_handler != SIG_DFL)
|
||||
sigaddset(catch, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
task_sig (struct task_struct *p, libgtop_proc_signal_t *proc_signal)
|
||||
{
|
||||
sigset_t ignore, catch;
|
||||
int i, nsig;
|
||||
|
||||
if (_NSIG_WORDS > LIBGTOP_NSIG)
|
||||
nsig = LIBGTOP_NSIG;
|
||||
else
|
||||
nsig = _NSIG_WORDS;
|
||||
|
||||
collect_sigign_sigcatch (p, &ignore, &catch);
|
||||
|
||||
for (i = 0; i < nsig; i++) {
|
||||
proc_signal->signal [i] = p->signal.sig [i];
|
||||
proc_signal->blocked [i] = p->blocked.sig [i];
|
||||
proc_signal->ignore [i] = ignore.sig [i];
|
||||
proc_signal->catch [i] = catch.sig [i];
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
libgtop_sysctl (ctl_table *table, int nlen, int *name)
|
||||
{
|
||||
@@ -618,8 +663,11 @@ libgtop_sysctl_proc (ctl_table *table, int nlen, int *name,
|
||||
libgtop_proc_state_t *proc_state;
|
||||
libgtop_proc_kernel_t *proc_kernel;
|
||||
libgtop_proc_segment_t *proc_segment;
|
||||
libgtop_proc_signal_t *proc_signal;
|
||||
libgtop_proc_mem_t *proc_mem;
|
||||
#ifdef __SMP__
|
||||
int i;
|
||||
#endif
|
||||
|
||||
switch (table->ctl_name) {
|
||||
case LIBGTOP_PROC_STATE:
|
||||
@@ -736,6 +784,12 @@ libgtop_sysctl_proc (ctl_table *table, int nlen, int *name,
|
||||
proc_mem->rss = tsk->mm->rss << PAGE_SHIFT;
|
||||
proc_mem->rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0;
|
||||
break;
|
||||
case LIBGTOP_PROC_SIGNAL:
|
||||
proc_signal = table->data;
|
||||
memset (proc_signal, 0, sizeof (libgtop_proc_signal_t));
|
||||
|
||||
task_sig (tsk, proc_signal);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@@ -14,7 +14,8 @@ enum {
|
||||
LIBGTOP_PROC_STATE,
|
||||
LIBGTOP_PROC_KERNEL,
|
||||
LIBGTOP_PROC_SEGMENT,
|
||||
LIBGTOP_PROC_MEM
|
||||
LIBGTOP_PROC_MEM,
|
||||
LIBGTOP_PROC_SIGNAL
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -27,6 +28,8 @@ enum {
|
||||
LIBGTOP_PROCLIST_RUID
|
||||
};
|
||||
|
||||
#define LIBGTOP_NSIG 4
|
||||
|
||||
#define LIBGTOP_PROCLIST_MASK 15
|
||||
|
||||
#define LIBGTOP_EXCLUDE_IDLE 0x1000
|
||||
@@ -44,6 +47,7 @@ typedef struct libgtop_proc_state libgtop_proc_state_t;
|
||||
typedef struct libgtop_proc_kernel libgtop_proc_kernel_t;
|
||||
typedef struct libgtop_proc_segment libgtop_proc_segment_t;
|
||||
typedef struct libgtop_proc_mem libgtop_proc_mem_t;
|
||||
typedef struct libgtop_proc_signal libgtop_proc_signal_t;
|
||||
|
||||
struct libgtop_cpu
|
||||
{
|
||||
@@ -138,4 +142,12 @@ struct libgtop_proc_mem
|
||||
unsigned long rss, rlim;
|
||||
};
|
||||
|
||||
struct libgtop_proc_signal
|
||||
{
|
||||
unsigned long signal [LIBGTOP_NSIG];
|
||||
unsigned long blocked [LIBGTOP_NSIG];
|
||||
unsigned long ignore [LIBGTOP_NSIG];
|
||||
unsigned long catch [LIBGTOP_NSIG];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -35,22 +35,39 @@
|
||||
|
||||
BEGIN_LIBGTOP_DECLS
|
||||
|
||||
int glibtop_get_proc_data_stat_s (glibtop *server, libgtop_stat_t *stat);
|
||||
int glibtop_get_proc_data_mem_s (glibtop *server, libgtop_mem_t *mem);
|
||||
int glibtop_get_proc_data_swap_s (glibtop *server, libgtop_swap_t *swap);
|
||||
int glibtop_get_proc_data_proclist_s (glibtop *server,
|
||||
int
|
||||
glibtop_get_proc_data_stat_s (glibtop *server, libgtop_stat_t *stat);
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_mem_s (glibtop *server, libgtop_mem_t *mem);
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_swap_s (glibtop *server, libgtop_swap_t *swap);
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proclist_s (glibtop *server,
|
||||
libgtop_proclist_t *proclist,
|
||||
u_int64_t which, u_int64_t arg);
|
||||
int glibtop_get_proc_data_proc_state_s (glibtop *server,
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_state_s (glibtop *server,
|
||||
libgtop_proc_state_t *proc_state,
|
||||
pid_t pid);
|
||||
int glibtop_get_proc_data_proc_mem_s (glibtop *server,
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_mem_s (glibtop *server,
|
||||
libgtop_proc_mem_t *proc_mem,
|
||||
pid_t pid);
|
||||
int glibtop_get_proc_data_proc_kernel_s (glibtop *server,
|
||||
libgtop_proc_kernel_t *proc_kernel,
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_signal_s (glibtop *server,
|
||||
libgtop_proc_signal_t *proc_signal,
|
||||
pid_t pid);
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_kernel_s (glibtop *server,
|
||||
libgtop_proc_kernel_t *proc_kernel,
|
||||
pid_t pid);
|
||||
|
||||
END_LIBGTOP_DECLS
|
||||
|
||||
|
@@ -115,6 +115,22 @@ glibtop_get_proc_data_proc_mem_s (glibtop *server,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_signal_s (glibtop *server,
|
||||
libgtop_proc_signal_t *proc_signal,
|
||||
pid_t pid)
|
||||
{
|
||||
int name [3] = { CTL_LIBGTOP, LIBGTOP_PROC_SIGNAL, pid };
|
||||
size_t size = sizeof (libgtop_proc_signal_t);
|
||||
|
||||
if (sysctl (name, 3, proc_signal, &size, NULL, 0)) {
|
||||
glibtop_warn_io_r (server, "sysctl (libgtop/proc_signal)");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
glibtop_get_proc_data_proc_kernel_s (glibtop *server,
|
||||
libgtop_proc_kernel_t *proc_kernel,
|
||||
|
@@ -24,7 +24,13 @@
|
||||
#include <glibtop.h>
|
||||
#include <glibtop/procsignal.h>
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_proc_signal = 0;
|
||||
#include <glibtop_private.h>
|
||||
|
||||
static const unsigned long _glibtop_sysdeps_proc_signal =
|
||||
(1 << GLIBTOP_PROC_SIGNAL_SIGNAL) +
|
||||
(1 << GLIBTOP_PROC_SIGNAL_BLOCKED) +
|
||||
(1 << GLIBTOP_PROC_SIGNAL_SIGIGNORE) +
|
||||
(1 << GLIBTOP_PROC_SIGNAL_SIGCATCH);
|
||||
|
||||
/* Init function. */
|
||||
|
||||
@@ -40,5 +46,20 @@ void
|
||||
glibtop_get_proc_signal_s (glibtop *server, glibtop_proc_signal *buf,
|
||||
pid_t pid)
|
||||
{
|
||||
libgtop_proc_signal_t proc_signal;
|
||||
int i;
|
||||
|
||||
memset (buf, 0, sizeof (glibtop_proc_signal));
|
||||
|
||||
if (glibtop_get_proc_data_proc_signal_s (server, &proc_signal, pid))
|
||||
return;
|
||||
|
||||
for (i = 0; i < 1; i++) {
|
||||
buf->signal [i] = proc_signal.signal [i];
|
||||
buf->blocked [i] = proc_signal.blocked [i];
|
||||
buf->sigignore [i] = proc_signal.ignore [i];
|
||||
buf->sigcatch [i] = proc_signal.catch [i];
|
||||
}
|
||||
|
||||
buf->flags = _glibtop_sysdeps_proc_signal;
|
||||
}
|
||||
|
Reference in New Issue
Block a user