Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Sep 2001 16:15:14 -0400 (EDT)
From:      Mikhail Teterin <mi@aldan.algebra.com>
To:        asmodai@wxs.nl
Cc:        current@freebsd.org, arch@freebsd.org
Subject:   Re: proctitle progress reporting for dump(8)
Message-ID:  <200109022015.f82KFFo71687@aldan.algebra.com>
In-Reply-To: <20010901194706.C33712@daemon.ninth-circle.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0-1804289383-999461719=:969
Content-Type: TEXT/plain; charset=us-ascii

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


--0-1804289383-999461719=:969
Content-Type: TEXT/plain; name=p-title
Content-Description: let dump update its process title with the last output message
Content-Disposition: attachment; filename=p-title

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();

--0-1804289383-999461719=:969--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200109022015.f82KFFo71687>