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

有帮助吗?

解决方案 2

我的一位同事,我实际上看了看源头,找到了答案。

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top