linux-assembly.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: linuxassembly@evobsyniva.com
To: linux-assembly@vger.kernel.org
Subject: Orphaned Processes and TCSETSW
Date: Sun, 12 Oct 2003 19:22:36 -0400	[thread overview]
Message-ID: <oprwydvy0ylmcbdf@smtp-server.woh.rr.com> (raw)


I've made a new program for Softer, and when it starts up, if it's not run under Softer it will start Softer itself, so that people can just type 'gpsmap' instead of 'softer gpsmap'.  It works well, until it exits.  Upon exit, Softer gives this error message:

Error calling TCSETSW to restore settings.

EAX Error Code: EIO -- I/O error
EAX: FFFFFFFB  EBX: 00000000  ECX: 00005403  EDX: 08054A96
ESI: 0806938E  EDI: 40002000  EBP: 00000000  ESP: BFFFFB24
EIP: 08048781  EFLAGS: 00000000 00000000 00000010 00000110
                                           ..OD   SZ A P C

And the console is left in raw mode.  (not keyboard raw, rather 'stty raw -echo' raw)  The line it's having trouble with is this:

sys sys_ioctl, 0, TCSETSW, old_termios; systrap "calling TCSETSW to restore settings."

...or in other words...

mov eax, sys_ioctl    ; sys_ioctl == 54
mov ebx, 0
mov ecx, TCSETSW      ; TCSETSW == 0x5403
mov edx, old_termios
int 0x80

Searching google all I could come up with was this:

     If  TOSTOP is set and a member of a background process group
     attempts   to   ioctl  its  controlling  terminal,  and that
     ioctl will modify terminal parameters (for example,  TCSETA,
     TCSETAW,  TCSETAF, or  TIOCSPGRP), its process group will be
     sent a   SIGTTOU  signal,  which  will  normally  cause  the
     members  of  that  process  group to stop.  If, however, the
     process is ignoring  or  holding  SIGTTOU,  the  ioctl  will
     succeed.  If the process is not ignoring or holding  SIGTTOU
     and is a member of an orphaned process group, the write will
     fail with  errno set to  EIO, and no signal will be sent.

However, TOSTOP isn't set, so it shouldn't happen.  Regardless, I tried adding signals 20, 21, and 22 to Softer's mile long ignore list, and although that stopped the EIO error, the console settings wern't being restored.  So I added a handler for those signals that just returns, but then the EIO error still occours, so apparently the kernel is rather set on not allowing Softer to change the terminal parameters.

If Softer exits first, there is no problem.  (e.g., if I press control-alt-backspace to make softer exit, or if I make the gpsmap program, upon exit, close it's stdin and stdout (which are just pipes to Softer), then sleep 0.2 seconds to give Softer a second to see the pipes are closed and exit, it works just fine.)  So I'm pretty sure it's something to do with this 'background process group' thing, since the process chain looks like this:

	shell -> gpsmap -> softer

And if gpsmap exits first, there's a link missing in the chain.  If I execute it with 'softer gpsmap' then it's like this:

	shell -> softer -> gpsmap

And there's never any problem regardless of which exits first.

If I can't find a solution to the problem, I'll probably just make it call wait on Softer to make sure Softer exits first, but I'd rather fix the problem than just work around it.

Any suggestions?  Anyone know more than I do about this controlling terminal orphaned background process group stuff?



             reply	other threads:[~2003-10-12 23:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-12 23:22 linuxassembly [this message]
2003-10-17 17:18 ` Orphaned Processes and TCSETSW willy meier
  -- strict thread matches above, loose matches on Subject: below --
2003-10-17 17:22 correction: Re: Orphaned Processes and TCSETSW] willy meier
2003-10-17 21:37 ` Orphaned Processes and TCSETSW Philip Jacob Smith
2003-10-19 16:08   ` willy meier
2003-10-19 19:50     ` Philip Jacob Smith
2003-10-20 11:38       ` willy meier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=oprwydvy0ylmcbdf@smtp-server.woh.rr.com \
    --to=linuxassembly@evobsyniva.com \
    --cc=linux-assembly@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).