* pidstat: -U option added. This option tells pidstat to display
the username of the task instead of its UID.
* pidstat manual page updated.
+ * Now use sigaction() instead of signal() for signals handling
+ to avoid portability problems.
* FAQ updated.
2012/12/23: Version 10.1.3 - Sebastien Godard (sysstat <at> orange.fr)
long interval = 0;
char timestamp[64];
+struct sigaction alrm_act;
/*
***************************************************************************
* SIGALRM signal handler.
*
* IN:
- * @sig Signal number. Set to 0 for the first time, then to SIGALRM.
+ * @sig Signal number.
***************************************************************************
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
printf("\n");
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Main loop */
rw_io_stat_loop(count, &rectime);
/*
* iostat: report CPU and I/O statistics
- * (C) 1998-2012 by Sebastien GODARD (sysstat <at> orange.fr)
+ * (C) 1998-2013 by Sebastien GODARD (sysstat <at> orange.fr)
*
***************************************************************************
* This program is free software; you can redistribute it and/or modify it *
long interval = 0;
char timestamp[64];
+struct sigaction alrm_act;
/*
***************************************************************************
/*
***************************************************************************
- * SIGALRM signal handler.
+ * SIGALRM signal handler. No need to reset the handler here.
*
* IN:
- * @sig Signal number. Set to 0 for the first time, then to SIGALRM.
+ * @sig Signal number.
***************************************************************************
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
printf("\n");
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Main loop */
rw_io_stat_loop(count, &rectime);
/* Nb of soft interrupts per processor */
int softirqcpu_nr = 0;
+struct sigaction alrm_act, int_act;
int sigint_caught = 0;
/*
/*
***************************************************************************
- * SIGALRM signal handler
+ * SIGALRM signal handler. No need to reset the handler here.
*
* IN:
* @sig Signal number.
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
}
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Save the first stats collected. Will be used to compute the average */
mp_tstamp[2] = mp_tstamp[0];
}
/* Set a handler for SIGINT */
- signal(SIGINT, int_handler);
+ memset(&int_act, 0, sizeof(int_act));
+ int_act.sa_handler = (void *) int_handler;
+ sigaction(SIGINT, &int_act, NULL);
pause();
long interval = 0;
char timestamp[64];
+struct sigaction alrm_act;
/*
***************************************************************************
* SIGALRM signal handler.
*
* IN:
- * @sig Signal number. Set to 0 for the first time, then to SIGALRM.
+ * @sig Signal number.
***************************************************************************
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
printf("\n");
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Main loop */
rw_io_stat_loop(count, &rectime);
unsigned int pidflag = 0; /* General flags */
unsigned int tskflag = 0; /* TASK/CHILD stats */
unsigned int actflag = 0; /* Activity flag */
+
+struct sigaction alrm_act, int_act;
int sigint_caught = 0;
/*
/*
***************************************************************************
- * SIGALRM signal handler.
+ * SIGALRM signal handler. No need to resert the handler here.
*
* IN:
* @sig Signal number.
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
}
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Save the first stats collected. Will be used to compute the average */
ps_tstamp[2] = ps_tstamp[0];
memcpy(st_pid_list[2], st_pid_list[0], PID_STATS_SIZE * pid_nr);
/* Set a handler for SIGINT */
- signal(SIGINT, int_handler);
+ memset(&int_act, 0, sizeof(int_act));
+ int_act.sa_handler = (void *) int_handler;
+ sigaction(SIGINT, &int_act, NULL);
/* Wait for SIGALRM (or possibly SIGINT) signal */
pause();
extern struct activity *act[];
+struct sigaction alrm_act, int_act;
+
/*
***************************************************************************
* Print usage and exit.
/*
***************************************************************************
- * SIGALRM signal handler.
+ * SIGALRM signal handler. No need to reset handler here.
*
* IN:
* @sig Signal number.
*/
void alarm_handler(int sig)
{
- signal(SIGALRM, alarm_handler);
alarm(interval);
}
new_ofile[0] = '\0';
/* Set a handler for SIGINT */
- signal(SIGINT, int_handler);
+ memset(&int_act, 0, sizeof(int_act));
+ int_act.sa_handler = (void *) int_handler;
+ sigaction(SIGINT, &int_act, NULL);
/* Main loop */
do {
}
/* Set a handler for SIGALRM */
- alarm_handler(0);
+ memset(&alrm_act, 0, sizeof(alrm_act));
+ alrm_act.sa_handler = (void *) alarm_handler;
+ sigaction(SIGALRM, &alrm_act, NULL);
+ alarm(interval);
/* Main loop */
rw_sa_stat_loop(count, &rectime, stdfd, ofd, ofile);
extern struct activity *act[];
+struct sigaction int_act;
int sigint_caught = 0;
/*
copy_structures(act, id_seq, record_hdr, 2, 0);
/* Set a handler for SIGINT */
- signal(SIGINT, int_handler);
+ memset(&int_act, 0, sizeof(int_act));
+ int_act.sa_handler = (void *) int_handler;
+ int_act.sa_flags = SA_RESTART;
+ sigaction(SIGINT, &int_act, NULL);
/* Main loop */
do {