2009-06-16 76 views
2

當我scp文件時,我可以用^ Z來阻止它,並把它放在後臺。當它在後臺時停止打印它的進度,但複製繼續。如果我再次前景,它會恢復打印。它如何知道? SIGTTOU?這是否發生在標準的ptty上?一個過程如何知道它是什麼時候背景?

+0

這可能是你的shell的一個功能嗎? – Cogsy 2009-06-16 15:01:27

+0

我在想沒有。我使用bin/bash(不是那種令人興奮的shell),sh和ksh具有相同的行爲 – jdizzle 2009-06-16 15:31:43

回答

1

我的一位同事和我實際上通過來源查找並找到答案。

每當scp打印輸出時,它都會在stdout上運行tcgetpgrp。這將返回終端的控制進程組(假設它是一個終端)。只有在控制終端的進程組與scp的進程組相同時纔會打印出來。結果不需要信號! (雖然它處理SIGWINCH來計算進度線的大小)。

2

是的,你明白了。該進程會陷入或忽略SIGTTOU(也可能是SIGTTIN,取決於它在做什麼),然後在接收到這些信號時它會正常運行。 Linux的確在真正的僞終端上發送這些信號。

相關問題