2

当我 scp 一个文件时,我可以用 ^Z 停止它并将它放在后台。当它在后台时,它会停止打印其进度,但复制会继续。如果我再次将其置于前台,它将继续打印。它是怎么知道的?看头?这会发生在标准的ptty上吗?

4

2 回答 2

2

是的,你明白了。该进程将捕获或忽略 SIGTTOU(可能还有 SIGTTIN,这取决于它在做什么),然后在接收到这些信号时它会表现得适当。Linux 确实在普通的伪终端上发送这些信号。

于 2009-06-16T15:02:04.580 回答
1

我和我的一个同事实际上查看了源代码并找到了答案。

每当 scp 即将打印输出时,它都会在标准输出上运行 tcgetpgrp。这将返回终端的控制进程组(假设它是一个终端)。仅当控制终端的进程组与 scp 的进程组相同时才会打印出来。原来不需要信号!(虽然它确实处理 SIGWINCH 来计算进度线的大小)。

于 2009-06-16T16:06:11.763 回答