tty settings with rsync -e ssh interrupt
Hardy Merrill
hmerrill at redhat.com
Sat Feb 8 06:07:04 EST 2003
jw schultz [jw at pegasys.ws] wrote:
> On Thu, Feb 06, 2003 at 04:19:36PM -0500, Hardy Merrill wrote:
> > jw schultz [jw at pegasys.ws] wrote:
> > > On Thu, Feb 06, 2003 at 03:46:11PM -0500, Hardy Merrill wrote:
> > > > I'm following up on a bug reported back in May 2002:
> > > >
> > > > https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=64689
> > > >
> > > > this bug was also reported to the rsync mailing list:
> > > >
> > > > http://www.mail-archive.com/rsync@lists.samba.org/mail5.html#04250
> > > >
> > > > I couldn't find any discussion other than the reporters post
> > > > describing the problem.
> > > >
> > > > Anyway, I just downloaded the new rsync-2.5.6 source, installed
> > > > it, and found that the bug still exists. This problem shows
> > > > itself when using "-e ssh", and Ctrl-C'ing at the ssh password
> > > > prompt - the terminal gets screwed up.
> > > >
> > > > Anyone have any insight on this?
> > > >
> > > > Thanks.
> > > >
> > > > --
> > > > Hardy Merrill
> > > > Senior Software Engineer
> > > > Red Hat, Inc.
> > >
> > > Blame ssh. It is failing to restore the tty settings.
> >
> > Please excuse my naivete - I'm a relative newbie to rsync - how
> > come when you run ssh by itself and Ctrl-C at the password
> > prompt, your terminal is fine? Why is it only affected when
> > run with -e from rsync?
>
> Sorry. Don't blame ssh. Rsync is messing things up.
>
> I've attached a cleaned up strace output.
>
> What is happening is that both rsync and ssh get the SIGINT.
> Unfortunately, before ssh has had a sufficient chance to
> process the SIGINT rsync sends it a SIGUSR1 as part of
> cleanup. ssh doesn't catch SIGUSR1 so it just exits.
>
> This is the first i've looked at this part of rsync so i'd
> be cautious about changing any of the timings. However, it
> does seem to me that a more correct behavior on receiving a
> SIGINT would be to forward that to the children and give
> them a chance to clean up before sending any more signals.
Where does this go from here? Will a solution to this problem
be persued?
Thanks.
--
Hardy Merrill
Senior Software Engineer
Red Hat, Inc.
> rsync rt_sigaction(SIGUSR1, {0x8050cc0, [USR1], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGUSR2, {0x8050ce0, [USR2], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGCHLD, {0x8050d10, [CHLD], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGINT, {0x804a840, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGHUP, {0x804a840, [HUP], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGTERM, {0x804a840, [TERM], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
> rsync rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
> rsync fork() = [ssh-pid]
> ssh execve("/usr/bin/ssh", ["ssh", "-l", "pgsql", "leto", "rsync", "--server", "--sender", "-logDtpr", ".", "/etc"], [/* 65 vars */]) = 0
> ssh rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_IGN}, 8) = 0
> ssh fcntl64(3, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
> ssh open("/dev/tty", O_RDWR|O_LARGEFILE) = 4
> ssh rt_sigaction(SIGINT, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGHUP, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGQUIT, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGTERM, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGTSTP, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGTTIN, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh rt_sigaction(SIGTTOU, {0x806f04c, [], 0x4000000}, {SIG_DFL}, 8) = 0
> ssh ioctl(4, TCGETS, {B38400 opost isig icanon echo ...}) = 0
> ssh ioctl(4, TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
> ssh write(4, "pgsql at leto\'s password: ", 23) = 23
> ssh read(4, <unfinished ...>
> rsync <... select resumed> ) = ? ERESTARTNOHAND (To be restarted)
> ssh <... read resumed> 0xbfffe783, 1) = ? ERESTARTSYS (To be restarted)
> rsync --- SIGINT (Interrupt) ---
> rsync rt_sigaction(SIGUSR1, {SIG_IGN}, <unfinished ...>
> ssh --- SIGINT (Interrupt) ---
> rsync <... rt_sigaction resumed> {0x8050cc0, [USR1], SA_RESTART|0x4000000}, 8) = 0
> ssh sigreturn( <unfinished ...>
> rsync rt_sigaction(SIGUSR2, {SIG_IGN}, <unfinished ...>
> ssh <... sigreturn resumed> ) = ? (mask now [RTMIN])
> rsync <... rt_sigaction resumed> {0x8050ce0, [USR2], SA_RESTART|0x4000000}, 8) = 0
> ssh write(4, "\n", 1 <unfinished ...>
> rsync wait4([ssh-pid], <unfinished ...>
> ssh <... write resumed> ) = 1
> rsync <... wait4 resumed> 0xbfffeb00, WNOHANG, NULL) = -1 ECHILD (No child processes)
> ssh ioctl(4, TCSETSF <unfinished ...>
> rsync getpid( <unfinished ...>
> ssh <... ioctl resumed> , {B38400 opost isig icanon echo ...}) = 0
> rsync <... getpid resumed> ) = 17409
> ssh rt_sigaction(SIGINT, {SIG_DFL}, <unfinished ...>
> rsync kill([ssh-pid], SIGUSR1 <unfinished ...>
> ssh <... rt_sigaction resumed> NULL, 8) = 0
> rsync <... kill resumed> ) = 0
> ssh --- SIGUSR1 (User defined signal 1) ---
> rsync write(2, "rsync error: received SIGUSR1 or"..., 66) = 66
> rsync _exit(20) = ?
> --
> To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/rsync
> Before posting, read: http://www.tuxedo.org/~esr/faqs/smart-questions.html
More information about the rsync
mailing list