【发布时间】:2017-06-12 05:59:52
【问题描述】:
(我在 Debian 8 上使用 Bash 4.4.12。bash mailing list 中也提出了问题。)
请参阅以下步骤来重现问题。
来自 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 启动了作为守护进程运行的多路复用 SSH 连接。 STEP 105 尝试使用多路连接来运行sleep 命令。但是我不能在当前的shell中输入任何东西。如果我终止 ssh ... sleep & 进程,那么 Bash 将能够再次接受我的输入。似乎所有输入都被后台 ssh 进程消耗。
转到 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] #
我解码了信号掩码:
PENDING (00000000):
BLOCKED (00000000):
IGNORED (00001000):
13 PIPE
CAUGHT (188004003):
1 HUP
2 INT
15 TERM
28 WINCH
32
33
这里我们可以看到 ssh 进程没有捕捉到SIGTTIN 信号。这让我感到困惑,因为后台作业(进程组)应该收到 SIGTTIN 并在尝试从 tty 读取时停止。
【问题讨论】:
-
当你尝试
+Z 时会发生什么? -
刚试过。什么都不会发生。
标签: bash ssh pty job-control process-group