一个过程如何知道什么时候被背景化了?

时间:2009-06-16 14:53:13

标签: c linux signals tty

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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