fmbutt@mrbt.sw.stratus.com (Farooq Butt) (12/01/90)
Folks: I've got a strange little UNIX question for you. The problem: I open an fd in a child process. The child process listens to the user's keyboard and given a certain key ("%") issues a SIGUSR1 to its parent that is listening on some other /dev/ttyfoo port. The parent has a signal handler that traps SIGUSR1. The handler was devised to restore the state of stdin (which I had previously converted to "raw" so that every key I hit would immediately be read) and to exit. Now here's the weirdness: if I issue a signal and exit from my child process (the child changed stdin to raw mode) _and_ ioctl stdin from the signal handler called by the _parent_ (i.e child screws with stdin and makes it raw, child gets a key, child signals parent and quits leaving handler to restore sanity) then the program causes a weird error with telnet (I/O error on /dev/ttyp1) and generally blows my session away. Now if I get the _child_ to restore stdin to sane values before exiting (i.e. clean up its own mess) everything works hunky dory. What's up? Isn't stdin stdin everywhere ? Why does re-ioctl'ing stdin back to sane modes cause life to be weird if I do it from the signal handler? Is there a relation to processes that I am missing ? If fd's are indeed process-specific then how come some programs trash stdin for the shell (many's the time I've had to do an stty after an ill-behaved program)? -fmb -- Hi-Tech Disclaimer: NOTHING in the above article has any relationship to reality. If any reality correspondences are found, please notify me IMMEDIATELY. Any threats or abuse of any kind is purely unintentional. My employer is not liable.