'Why a background ssh can take over the tty from Bash?
(I'm using Bash 4.4.12 on Debian 8. Question also asked in the bash mailing list.)
See the following steps to reproduce the problem.
From tty #1 (pts/2):
[STEP 101] # tty
/dev/pts/2
[STEP 102] # ssh -o ControlMaster=yes -o ControlPath=/tmp/socket.ssh -N -f 127.0.0.1
[STEP 103] # ps -C ssh u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1390 0.0 0.0 36440 656 ? Ss 11:33 0:00 ssh -o ControlMaster=yes -o ControlPath=/tmp/so
[STEP 104] #
[STEP 105] # ssh -o ControlMaster=no -o ControlPath=/tmp/socket.ssh \
127.0.0.1 sleep 3600 &
[1] 1396
[STEP 106] # <-- Here I cannot input anything except <CTRL-C>
STEP 102 started the multiplexed SSH connection running as a daemon. STEP 105 tries to use the multiplexed connection to run a sleep command. But then I cannot input anything into the current shell. If I kill the ssh ... sleep & process then Bash will be able to accept my input again. Seems like all input is consumed by the background ssh process.
Go to tty #2 (pts/3):
[STEP 201] # tty
/dev/pts/3
[STEP 202] # ps t pts/2 j
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
723 1353 1353 1353 pts/2 1353 Ss+ 0 0:00 bash
1353 1396 1396 1353 pts/2 1353 S 0 0:00 ssh -o ControlMaster=no -o ControlPath=/tmp/socket.ssh 127.0.0.1 sleep 3600
[STEP 203] # ps s 1396
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 1396 00000000 00000000 00001000 188004003 S pts/2 0:00 ssh -o ControlMaster=no -o ControlPath=/tmp/socket.ssh 127.0.0.1 sleep 3600
[STEP 204] #
I decoded the sig masks:
PENDING (00000000):
BLOCKED (00000000):
IGNORED (00001000):
13 PIPE
CAUGHT (188004003):
1 HUP
2 INT
15 TERM
28 WINCH
32
33
Here we can see the ssh process does not catch the SIGTTIN signal. That's what confuses me because a background job (process group) should receive SIGTTIN and be stopped when it attempts to read from the tty.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
