我寫了一個簡單的包裝腳本,用於重複命令,當它們失敗時調用retry.py。然而,因爲我想看到孩子命令的輸出,我不得不提一些竅門。這適用於像rsync這樣的程序,但像scp這樣的其他程序可以使用額外的測試來顯示諸如進度表之類的內容。如何爲我在pty下運行的進程設置終端前臺進程組?
的SCP代碼有一個測試,是廣:
getpgrp() == tcgetpgrp(STDOUT_FILENO);
當我運行雖然包裝腳本失敗。
./tty_tests
isatty reports 1
pgrps are 13619 and 13619
和:
./retry.py -v -- ./tty_tests
command is ['./tty_tests']
isatty reports 1
pgrps are 13614 and -1
child finished: rc = 0
Ran command 1 times
我使用tcsetpgrp(嘗試),這對pty FD的但最終作爲IOCTL你可以用我的簡單tty_test.c的測試案例看導致ptys的-EINVAL。我寧願繼續使用Python子進程機制,如果可能的話,或者是手動fork/execve將會被需要嗎?
我給了一個嘗試,它沒有任何影響: > retry.py -v - 〜/ mysrc/retry.git/tty_tests 命令是['/home/ajb/mysrc/retry.git/tty_tests'] isatty reports 1 pgrps是28268和-1 孩子完成:rc = 0 Ran命令1次 – stsquad 2013-03-12 12:12:12
您能否粘貼一些完整的代碼? – 2013-03-12 17:08:52
OH!我只注意到你在你的問題中給出了retry.py的鏈接。我原以爲這只是stackoverflow試圖有幫助,並做出一個看起來像一個主機名的東西的鏈接。我會看一看。 – 2013-03-12 17:10:13