mirror of
https://git.busybox.net/busybox.git
synced 2024-11-27 07:33:26 +08:00
top: another scripting improvement
function old new delta handle_input 492 493 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
7d9a1d25e5
commit
4d6059eedc
43
procps/top.c
43
procps/top.c
@ -856,24 +856,22 @@ enum {
|
||||
#if ENABLE_FEATURE_USE_TERMIOS
|
||||
static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
{
|
||||
unsigned char c, *p, buf[64];
|
||||
int len;
|
||||
unsigned char c;
|
||||
struct pollfd pfd[1];
|
||||
|
||||
pfd[0].fd = 0;
|
||||
pfd[0].events = POLLIN;
|
||||
if (safe_poll(pfd, 1, interval * 1000) <= 0)
|
||||
return scan_mask;
|
||||
|
||||
len = safe_read(STDIN_FILENO, &buf, sizeof(buf)-1);
|
||||
if (len <= 0) { /* error/EOF? */
|
||||
option_mask32 |= OPT_EOF;
|
||||
return scan_mask;
|
||||
}
|
||||
while (1) {
|
||||
if (safe_poll(pfd, 1, interval * 1000) <= 0)
|
||||
return scan_mask;
|
||||
interval = 0;
|
||||
|
||||
if (safe_read(STDIN_FILENO, &c, 1) != 1) { /* error/EOF? */
|
||||
option_mask32 |= OPT_EOF;
|
||||
return scan_mask;
|
||||
}
|
||||
|
||||
buf[len] = 0;
|
||||
p = buf;
|
||||
while ((c = *p++) != 0) {
|
||||
if (c == initial_settings.c_cc[VINTR])
|
||||
return EXIT_MASK;
|
||||
if (c == initial_settings.c_cc[VEOF])
|
||||
@ -881,9 +879,11 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
c |= 0x20; /* lowercase */
|
||||
if (c == 'q')
|
||||
return EXIT_MASK;
|
||||
|
||||
if (c == 'n') {
|
||||
IF_FEATURE_TOPMEM(scan_mask = TOP_MASK;)
|
||||
sort_function[0] = pid_sort;
|
||||
continue;
|
||||
}
|
||||
if (c == 'm') {
|
||||
IF_FEATURE_TOPMEM(scan_mask = TOP_MASK;)
|
||||
@ -892,12 +892,14 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
sort_function[1] = pcpu_sort;
|
||||
sort_function[2] = time_sort;
|
||||
# endif
|
||||
continue;
|
||||
}
|
||||
# if ENABLE_FEATURE_SHOW_THREADS
|
||||
if (c == 'h'
|
||||
IF_FEATURE_TOPMEM(&& scan_mask != TOPMEM_MASK)
|
||||
) {
|
||||
scan_mask ^= PSSCAN_TASKS;
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
# if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
@ -906,12 +908,14 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
sort_function[0] = pcpu_sort;
|
||||
sort_function[1] = mem_sort;
|
||||
sort_function[2] = time_sort;
|
||||
continue;
|
||||
}
|
||||
if (c == 't') {
|
||||
IF_FEATURE_TOPMEM(scan_mask = TOP_MASK;)
|
||||
sort_function[0] = time_sort;
|
||||
sort_function[1] = mem_sort;
|
||||
sort_function[2] = pcpu_sort;
|
||||
continue;
|
||||
}
|
||||
# if ENABLE_FEATURE_TOPMEM
|
||||
if (c == 's') {
|
||||
@ -920,10 +924,13 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
prev_hist = NULL;
|
||||
prev_hist_count = 0;
|
||||
sort_field = (sort_field + 1) % NUM_SORT_FIELD;
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
if (c == 'r')
|
||||
if (c == 'r') {
|
||||
inverted ^= 1;
|
||||
continue;
|
||||
}
|
||||
# if ENABLE_FEATURE_TOP_SMP_CPU
|
||||
/* procps-2.0.18 uses 'C', 3.2.7 uses '1' */
|
||||
if (c == 'c' || c == '1') {
|
||||
@ -940,9 +947,11 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
num_cpus = 0;
|
||||
smp_cpu_info = !smp_cpu_info;
|
||||
get_jiffy_counts();
|
||||
continue;
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
break; /* unknown key -> force refresh */
|
||||
}
|
||||
|
||||
return scan_mask;
|
||||
@ -991,7 +1000,9 @@ static unsigned handle_input(unsigned scan_mask, unsigned interval)
|
||||
* echo sss | ./busybox top
|
||||
* - shows memory screen
|
||||
* echo sss | ./busybox top -bn1 >mem
|
||||
* - saves memory screen - the *whole* list, not first NROWS porcesses!
|
||||
* - saves memory screen - the *whole* list, not first NROWS processes!
|
||||
* echo .m.s.s.s.s.s.s.q | ./busybox top -b >z
|
||||
* - saves several different screens, and exits
|
||||
*
|
||||
* TODO: -i STRING param as a better alternative?
|
||||
*/
|
||||
@ -1165,8 +1176,8 @@ int top_main(int argc UNUSED_PARAM, char **argv)
|
||||
#if !ENABLE_FEATURE_USE_TERMIOS
|
||||
sleep(interval);
|
||||
#else
|
||||
if (option_mask32 & (OPT_b|OPT_EOF))
|
||||
/* batch mode, or EOF on stdin ("top </dev/null") */
|
||||
if (option_mask32 & OPT_EOF)
|
||||
/* EOF on stdin ("top </dev/null") */
|
||||
sleep(interval);
|
||||
else
|
||||
scan_mask = handle_input(scan_mask, interval);
|
||||
|
Loading…
Reference in New Issue
Block a user