mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 16:24:13 +08:00
tools/power turbostat: on SIGINT: sample, print and exit
When running in interval-mode, catch interrupts and print a final data record before exiting. Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
3f44a5c62b
commit
8aa2ed0b28
@ -267,6 +267,10 @@ CPU PRF_CTRL
|
||||
|
||||
.fi
|
||||
|
||||
.SH SIGNALS
|
||||
|
||||
SIGINT will interrupt interval-mode.
|
||||
The end-of-interval data will be collected and displayed before turbostat exits.
|
||||
.SH NOTES
|
||||
|
||||
.B "turbostat "
|
||||
|
@ -2600,11 +2600,37 @@ int snapshot_proc_sysfs_files(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int exit_requested;
|
||||
|
||||
static void signal_handler (int signal)
|
||||
{
|
||||
switch (signal) {
|
||||
case SIGINT:
|
||||
exit_requested = 1;
|
||||
if (debug)
|
||||
fprintf(stderr, " SIGINT\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void setup_signal_handler(void)
|
||||
{
|
||||
struct sigaction sa;
|
||||
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
|
||||
sa.sa_handler = &signal_handler;
|
||||
|
||||
if (sigaction(SIGINT, &sa, NULL) < 0)
|
||||
err(1, "sigaction SIGINT");
|
||||
}
|
||||
void turbostat_loop()
|
||||
{
|
||||
int retval;
|
||||
int restarted = 0;
|
||||
|
||||
setup_signal_handler();
|
||||
|
||||
restart:
|
||||
restarted++;
|
||||
|
||||
@ -2646,6 +2672,8 @@ restart:
|
||||
compute_average(EVEN_COUNTERS);
|
||||
format_all_counters(EVEN_COUNTERS);
|
||||
flush_output_stdout();
|
||||
if (exit_requested)
|
||||
break;
|
||||
nanosleep(&interval_ts, NULL);
|
||||
if (snapshot_proc_sysfs_files())
|
||||
goto restart;
|
||||
@ -2665,6 +2693,8 @@ restart:
|
||||
compute_average(ODD_COUNTERS);
|
||||
format_all_counters(ODD_COUNTERS);
|
||||
flush_output_stdout();
|
||||
if (exit_requested)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user