diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-09-27 20:20:21 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-09-27 20:20:21 +0000 |
commit | a6f721ece8259d41096eae6527ff0b2c101144a1 (patch) | |
tree | a58cade6b18d3214174329382c672cdbb829f081 /usr.bin/top | |
parent | b2dba6634b0bbcca6112c46e081ae929d9b4cb1c (diff) | |
download | src-a6f721ece8259d41096eae6527ff0b2c101144a1.tar.gz src-a6f721ece8259d41096eae6527ff0b2c101144a1.zip |
Notes
Diffstat (limited to 'usr.bin/top')
-rw-r--r-- | usr.bin/top/top.1 | 2 | ||||
-rw-r--r-- | usr.bin/top/top.c | 50 |
2 files changed, 28 insertions, 24 deletions
diff --git a/usr.bin/top/top.1 b/usr.bin/top/top.1 index a26fbc181229..5b422fffe737 100644 --- a/usr.bin/top/top.1 +++ b/usr.bin/top/top.1 @@ -147,7 +147,7 @@ no information is available about the percentage of time spent by the CPU in eve .It Fl s Ar time Set the delay between screen updates to .Ar time -seconds. +seconds, which may be fractional. The default delay between updates is 1 second. .It Fl o Ar field Sort the process display area on the specified field. diff --git a/usr.bin/top/top.c b/usr.bin/top/top.c index 01cad421b64c..cd357a092e9f 100644 --- a/usr.bin/top/top.c +++ b/usr.bin/top/top.c @@ -233,7 +233,7 @@ main(int argc, const char *argv[]) static char tempbuf2[50]; sigset_t old_sigmask, new_sigmask; int topn = Infinity; - double delay = 2; + struct timeval delay = { 2, 0 }; int displays = 0; /* indicates unspecified */ int sel_ret = 0; time_t curr_time; @@ -377,20 +377,26 @@ main(int argc, const char *argv[]) break; } - case 's': - delay = strtod(optarg, &nptr); - if (nptr == optarg) { - warnx("warning: invalid delay"); - delay = 2; - warnings++; - } - if (delay < 0) { - warnx("warning: seconds delay should be positive -- using default"); - delay = 2; - warnings++; - } - - break; + case 's': + { + double delay_d = strtod(optarg, &nptr); + if (nptr == optarg) + { + warnx("warning: invalid delay"); + warnings++; + } + else if (delay_d <= 0) + { + warnx("warning: seconds delay should be positive -- using default"); + warnings++; + } + else + { + delay.tv_sec = delay_d; + delay.tv_usec = (delay_d - delay.tv_sec) * 1e6; + } + break; + } case 'q': /* be quick about it */ errno = 0; @@ -704,7 +710,8 @@ restart: no_command = true; if (!interactive) { - usleep(delay * 1e6); + timeout = delay; + select(0, NULL, NULL, NULL, &timeout); if (leaveflag) { end_screen(); exit(0); @@ -718,8 +725,7 @@ restart: /* set up arguments for select with timeout */ FD_ZERO(&readfds); FD_SET(0, &readfds); /* for standard input */ - timeout.tv_sec = delay; - timeout.tv_usec = 0; + timeout = delay; if (leaveflag) { end_screen(); @@ -880,12 +886,10 @@ restart: case CMD_delay: /* new seconds delay */ new_message(MT_standout, "Seconds to delay: "); - if ((i = readline(tempbuf1, 8, true)) > -1) + if ((i = readline(tempbuf1, 8, true)) > 0) { - if ((delay = i) == 0) - { - delay = 1; - } + delay.tv_sec = i; + delay.tv_usec = 0; } clear_message(); break; |