Ok, attached is  the patch addding a function, which  sets the proctitle
to the last output message and several calls to this function in places,
where it looked useful  to me. May be, I added  too many, and/or skipped
some...

Note, that I  intentially did not put this functionality  into the msg()
function itself  -- not all messages  need to be placed  into the title.
But a call to my new title(void) function can be placed whereever deemed
useful. Only those, that can be followed by a long wait...

The only tricks  here are to replace  the \n with the \0  in the lastmsg
and to restore the title to the original before forking.

The SIGINFO handling seemed to be as simple as:
--- main.c      2001/07/09 03:06:56     1.26
+++ main.c      2001/09/02 19:58:21
@@ -274,2 +274,4 @@
 
+       if (signal(SIGINFO, SIG_IGN) != SIG_IGN)
+               signal(SIGHUP, sig);
        if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
@@ -527,2 +536,5 @@
        switch(signo) {
+       case SIGINFO:
+               timeest();
+               break;
        case SIGALRM:

But it just  does not work :( I  tried Ctrl-T and I tried  killall -- no
output, besides the usual:
        load: 0.11  cmd: dump 69089 [running] 0.00u 0.00s 0% 392k

Any suggestions? Thanks!

I'm  only  a  ports  committer,  so if  the  proctitle  patch  is  found
acceptable  (wow!) --  could someone  please commit  it? Or  tell me  to
send-pr it...

        -mi

Index: dump.h
===================================================================
RCS file: /home/ncvs/src/sbin/dump/dump.h,v
retrieving revision 1.9
diff -U1 -r1.9 dump.h
--- dump.h      2001/08/10 23:12:10     1.9
+++ dump.h      2001/09/02 19:58:20
@@ -104,2 +104,3 @@
 void   timeest __P((void));
+void   title __P((void));
 time_t unctime __P((char *str));
Index: main.c
===================================================================
RCS file: /home/ncvs/src/sbin/dump/main.c,v
retrieving revision 1.26
diff -U1 -r1.26 main.c
--- main.c      2001/07/09 03:06:56     1.26
+++ main.c      2001/09/02 19:58:21
@@ -332,2 +334,3 @@
        }
+       title();
        sync();
@@ -358,2 +361,3 @@
        msg("mapping (Pass I) [regular files]\n");
+       title();
        anydirskipped = mapfiles(maxino, &tapesize);
@@ -361,2 +365,3 @@
        msg("mapping (Pass II) [directories]\n");
+       title();
        while (anydirskipped) {
@@ -410,2 +415,3 @@
        }
+       title();
 
@@ -423,2 +429,3 @@
        msg("dumping (Pass III) [directories]\n");
+       title();
        dirty = 0;              /* XXX just to get gcc to shut up */
@@ -441,2 +448,3 @@
        msg("dumping (Pass IV) [regular files]\n");
+       title();
        for (map = dumpinomap, ino = 1; ino < maxino; ino++) {
@@ -478,2 +486,3 @@
                    spcl.c_tapea / (tend_writing - tstart_writing));
+       title();
 
@@ -536,2 +548,3 @@
                msg("Rewriting attempted as response to unknown signal.\n");
+               title();
                (void)fflush(stderr);
Index: optr.c
===================================================================
RCS file: /home/ncvs/src/sbin/dump/optr.c,v
retrieving revision 1.12
diff -U1 -r1.12 optr.c
--- optr.c      2001/01/29 09:45:51     1.12
+++ optr.c      2001/09/02 19:58:21
@@ -203,2 +203,3 @@
 
+       setproctitle(NULL); /* restore the proctitle modified by title() */
        switch (pid = fork()) {
@@ -305,2 +306,3 @@
                        deltat / 3600, (deltat % 3600) / 60);
+               title();
        }
@@ -333,2 +335,28 @@
        va_end(ap);
+}
+
+/*
+ * This function can be called to place, what msg() above pushed to
+ * stderr, into the process title, viewable with the ps-command.
+ * A side effect of this function, is it replaces the final '\n' (if any)
+ * with the '\0' in the global variable lastmsg -- to avoid the literal
+ * "\n" being put into the proctitle.
+ * So, if the lastmsg needs to be output elsewhere, that should happen
+ * before calling title().
+ */
+void title()
+{
+       int lastlen;
+
+       lastlen = strlen(lastmsg);
+       if (lastmsg[lastlen-1] == '\n')
+               lastmsg[lastlen-1] = '\0';
+
+       /*
+        * It would be unwise to run multiple dumps of same disk at
+        * same time. So ``disk'' is sufficient for identifying, to
+        * which family of dump processes this one belongs -- the
+        * other processes continue to have the original titles
+        */
+       setproctitle("%s: %s", disk, lastmsg);
 }
Index: tape.c
===================================================================
RCS file: /home/ncvs/src/sbin/dump/tape.c,v
retrieving revision 1.13
diff -U1 -r1.13 tape.c
--- tape.c      2001/01/28 21:21:37     1.13
+++ tape.c      2001/09/02 19:58:22
@@ -533,2 +533,3 @@
         */
+       setproctitle(NULL); /* restore the proctitle modified by title() */
        childpid = fork();

Reply via email to