Thanks.
I run -current, so ports are in sync with cvs. Patch to mantainer.
But.
But I noted we should investigate on child processes.
I killed connection in our usual way (sigh!) with 4 tab opened.
*One* of these had top running.
All ksh were killed, *but* top's ksh not. Why?
After 'ps l' WCHAN is ttyin, and STATE IE+, which (from man ps)
indicate :
* "I Marks a process that is idle (sleeping for longer
than about 20 seconds)"
* "E The process is trying to exit"
* "+ The process is in the foreground process group of
its control terminal"
Keep investigating?
On 01/05/08 04:50 +0200, Jesus Sanchez wrote:
> Hi, I have just compiled and tested the program and I hopefully can say,
> its really working. I never expected such interest by solving this
> problem so I started loosing the hope.
>
> Thanks to the patch of Cesare Gargano, now I can run mrxvt using ksh
> and then kill X with Ctrl+Alt+Backspace without leaving zombie/dead ksh
> processes. I have a copy of the compiled binary mrxvt OpenBSD 4.2 on:
>
> http://usuarios.lycos.es/openminds/downloads/openbsderos/mrxvt_ksh
>
> (you have to install mrxvt by ports or packages, and then copy mrxvt_ksh
> to the original mrxvt bin destination)
>
> This compiled binary works. But I had a little problems because (I
> think) I have a different ports tree and the diff file does not worked
> for me and I had to patch init.c by hand. After all the make process
> stops telling me the line containing "rxvt_msg(..." made problems so I
> commented it and then "make install" compiled a sane mrxvt (I think).
>
> The mrxvt dev team should be informed about all this stuff so the would
> be able to make a fix of this without problems.
>
> Thanks Cesare.
> -Jesus
>
> Cesare Gargano escribis:
> >On 30/04/08 00:38 +0200, Jesus Sanchez wrote:
> >
> >>Solved! Oh my god, I'm so dumb and idiot, the option -hold was not
> >>helping me
> >>because I was using it in the wrong way, I used "-hold 0" and "-hold
> >>false" and
> >>I did not relized what the good option was "-hold 0x00" for the byte
> >>order.
> >>
> >>Many thanks for your info and so sorry about the confusion, I really
> >>feel as a dumb
> >>newbie.
> >>
> >>Thanks for all.
> >>
> >>
> >>Antoine Jacoutot escribis:
> >>
> >>>On Wed, 23 Apr 2008, Jesus Sanchez wrote:
> >>>
> >>>
> >>>>I launch startx (with fvwm2 and mrxvt on my .xinitrc) as a regular user
> >>>>(it's in the wheel group) and then I open a few tabs on mrxvt (3 or 4),
> >>>>then I close X with Ctrl+Alt+Backspace and I found with 'ps -ax' that
> >>>>the ksh opened with mrxvt (ttyp0, ttyp1, and more) are still running,
> >>>>not mrxvt.
> >>>>
> >>>>
> >>>Hi.
> >>>
> >>>Sorry, a bit late on this but I've been busy.
> >>>Did you have a look at the '-hold' option?
> >>>>From what you've been saying, disabling it should solve your problem.
> >>>
> >>>
> >>> -hold mask
> >>> Hold the tab open after the child process in it exits. mask
> >>> is the
> >>> mask of flags which control weather the tab will be held open
> >>> based
> >>> on the exit status of the child process. If the lowest bit
> >>> (0x01)
> >>> of mask is set, then the tab will always be held open after the
> >>> child exits. If the next bit (0x02) is set, then the tab will
> >>> only
> >>> be held open if the child exits abnormally (e.g. via
> >>> abort(1)). If
> >>> the third bit (0x04) is set, then the tab will be held open if
> >>> the
> >>> child exits with non-zero status.
> >>>
> >>> NOTE: In previous versions of mrxvt this was a boolean option.
> >>> For
> >>> backward compatibility, the value of True, On, Yes will be
> >>> treated
> >>> as 1 and anything illegal will be treated as 0. The default is
> >>> 0x06. [holdExit]
> >>>
> >>
> >
> >I try -hold option before other things, but this don't work for me... I
> >try with different wm (fvwm, twm, cwm, e17, e16, gnome, xfce), but if I
> >kill x connection with ctrl+alt+backspace, all ksh remain alive.
> >
> >I've added a IO handler to wrxvt init.c, this - as workaround - solve
> >all our issues.
> >
> >If this is not necessary, post your config here, please.
> >
> >--- src/init.c.orig Wed Apr 30 15:55:42 2008
> >+++ src/init.c Wed Apr 30 16:08:59 2008
> >@@ -46,6 +46,7 @@
> > int rxvt_getdtablesize ();
> > #endif
> > int rxvt_xerror_handler (const Display*, const XErrorEvent*);
> >+int rxvt_xioerror_handler (Display*);
> > void rxvt_init_colors (rxvt_t*);
> > void rxvt_init_win_size (rxvt_t*);
> > void rxvt_color_aliases (rxvt_t*, int);
> >@@ -886,6 +887,25 @@ rxvt_init_secondary(rxvt_t *r)
> > #endif
> > }
> >
> >+/*
> >+ * FIXME
> >+ *
> >+ * Wed Apr 30 14:35:33 CEST 2008 +gar <[EMAIL PROTECTED]>
> >+ *
> >+ * This is a workaround for for OpenBSD users. On killed connection after
> >+ * ctrl+alt+backspace with ksh as default shell child processes don't
> >exit,
> >+ * remaining in WCHAN state for ttyin. This works for me, I set a IO error
> >+ * handler for killed connection (man XSetErrorHandler) to clean vts
> >before
> >+ * exiting.
> >+ */
> >+int
> >+rxvt_xioerror_handler(Display *d)
> >+{
> >+ rxvt_msg(DBG_ERROR, DBG_INIT, "IO error, cleaning...\n");
> >+ rxvt_Exit_signal(1);
> >+ return 0;
> >+// abort();
> >+}
> >
> > /* INTPROTO */
> > int
> >@@ -1079,6 +1099,7 @@ rxvt_init_resources(rxvt_t* r, int argc, const char
> >*c
> > * allowed.
> > */
> > XSetErrorHandler( (XErrorHandler) rxvt_xerror_handler );
> >+ XSetIOErrorHandler( rxvt_xioerror_handler );
> >
> > /* Initialize all atoms after establishing connection to X */
> > for (i = 0; i < NUM_XA; i++)