*** empty log message ***

This commit is contained in:
Martin Baulig
1999-03-24 23:12:12 +00:00
parent 4b9e977fdc
commit 5390903a22
7 changed files with 176 additions and 39 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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;
}