dmesg - Add -ff feature
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 1 Jul 2014 15:52:16 +0000 (08:52 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 1 Jul 2014 15:53:28 +0000 (08:53 -0700)
* Add a feature whereby if -f is specified twice (-ff), dmesg will
  not sleep() in its monitoring loop and will instead live loop.
  This feature is intended only to help debug crashing kernel situations
  and should not be used for normal dmesg monitoring.

sbin/dmesg/dmesg.8
sbin/dmesg/dmesg.c

index d6e5ec0..d5208b0 100644 (file)
@@ -42,7 +42,7 @@
 .Nm
 .Op Fl a
 .Op Fl c
-.Op Fl f
+.Op Fl f[f]
 .Op Fl M Ar core
 .Op Fl N Ar system
 .Sh DESCRIPTION
@@ -70,12 +70,18 @@ This includes any syslog records and
 output.
 .It Fl c
 Clear the kernel buffer after printing.
-.It Fl f
+.It Fl f[f]
 After the initial message buffer dump
 .Nm
 monitors the kernel for additional data and displays it as it arrives.
 .Nm
 will not terminate until killed in this mode.
+If this option is specified twice,
+.Nm
+will live loop (use the cpu heavily) to obtain updates as quickly as
+possible.
+This second mode should only be used when trying to debug a kernel crashing
+situation.
 .It Fl M
 Extract values associated with the name list from the specified core
 instead of the default
index fdbf990..6449f4c 100644 (file)
@@ -87,7 +87,7 @@ main(int argc, char **argv)
                        clear = 1;
                        break;
                case 'f':
-                       tailmode = 1;
+                       ++tailmode;
                        break;
                case 'M':
                        memf = optarg;
@@ -170,7 +170,8 @@ main(int argc, char **argv)
                        if (rindex == cur.msg_bufx) {
                                if (tailmode == 0)
                                        break;
-                               sleep(1);
+                               if (tailmode == 1)
+                                       sleep(1);
                        }
                        if (KREAD((long)bufp, cur))
                                errx(1, "kvm_read: %s", kvm_geterr(kd));