Napisałem prosty skrypt do powtarzania poleceń, gdy nie zadzwonił pod numer retry.py. Jednak ponieważ chcę zobaczyć wynik polecenia potomnego, musiałem wyciągnąć trochę sztuczek. Działa to dobrze w przypadku programów takich jak rsync, ale inne, takie jak scp, stosują dodatkowy test do pokazywania rzeczy takich jak ich miernik postępu.Jak ustawić grupę procesów na pierwszym planie terminów dla procesu, w którym działam pod pty?
Kod SCP ma testu, który jest szeroko:
getpgrp() == tcgetpgrp(STDOUT_FILENO);
która nie kiedy biegnę choć skryptu otoki. Jak widać z mojego prostego przypadku testowego tty_test.c:
./tty_tests
isatty reports 1
pgrps are 13619 and 13619
oraz:
./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
próbowałem za pomocą tcsetpgrp(), który kończy się jako IOCTL na FD pty, ale że daje wynik -EINVAL dla ptys. Wolałbym nadal używać maszyny podprocesowej Python, jeśli jest to w ogóle możliwe, czy też wymagane jest ręczne wykonanie fork/execveing?
Poddałem próbę i nie ma żadnego efektu: > Retry.py -v - ~/mysrc/retry.git/tty_tests Komenda jest ['/home/ajb/mysrc/retry.git/tty_tests '] Raporty isatty 1 pgrps to 28268 i -1 ukończone dziecko: rc = 0 Polecenie Ran 1 razy – stsquad
Czy możesz wkleić kompletny kod? –
OH! Właśnie zauważyłem, że w swoim pytaniu podałeś link do retry.py. Myślałem, że to właśnie stackoverflow próbuje być pomocny i tworzy link z czegoś, co wyglądało jak nazwa hosta. Spojrzę na to. –