cygwin: вывод зависает до завершения программы
Я использую Cygwin в Windows XP.
Например, есть проблема с Mercurial.
Скажем, мне нужно перенести репо с несколькими повторными репозиториями на удаленный сервер. Эта операция занимает около 20 секунд.
Когда я звоню hg
от cmd.exe
Я вижу все действия в режиме реального времени:
pushing subrepo ..... to .....
searching for changes
и т.д. Все хорошо.
Но когда я звоню с терминала Cygwin, я набираю hg push
нажмите Enter, и в течение примерно 20 секунд к консоли ничего не будет отображаться, а затем сразу появятся все журналы.
Почему это так, и как мне этого избежать?
3 ответа
Я использую Mercurial под Cygwin, и у меня нет описанной проблемы. Это "родная" версия Windows для Mercurial или версия Cygwin? Если первое, попробуйте второе.
Я знаю, что это старая тема, но я сталкивался с этой проблемой в течение последних 3 лет. И примерно через месяц я разваливалась по швам и больше не могла это терпеть. Это может быть немного тупо, или тяжело, но это работает... и работает без проблем 2,75 года.
Вот что удерживало мой ноутбук от попадания на улицу
$ ln -s `where ping.exe | grep -v rh` /usr/bin/ping.exe
Вот как я туда попал...
david@Covet ~
$ which ping.exe
/usr/bin/ping.exe
david@Covet ~
$ /usr/bin/ping.exe
Usage: ping [-dfqrv] host [packetsize [count [preload]]]
david@Covet ~
$ where ping.exe
C:\rhcygwin64\bin\ping.exe
C:\Windows\System32\PING.EXE
david@Covet ~
$ mv /usr/bin/ping.exe /usr/bin/cyping.exe
david@Covet ~
$ ln -s `where ping.exe | grep -v rh` /usr/bin/ping.exe
david@Covet ~
$ which ping
/usr/bin/ping
david@Covet ~
$ ping
Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name
Options:
-t Ping the specified host until stopped.
To see statistics and continue - type Control-Break;
To stop - type Control-C.
-a Resolve addresses to hostnames.
-n count Number of echo requests to send.
-l size Send buffer size.
-f Set Don't Fragment flag in packet (IPv4-only).
-i TTL Time To Live.
-v TOS Type Of Service (IPv4-only. This setting has been deprecated
and has no effect on the type of service field in the IP Header).
-r count Record route for count hops (IPv4-only).
-s count Timestamp for count hops (IPv4-only).
-j host-list Loose source route along host-list (IPv4-only).
-k host-list Strict source route along host-list (IPv4-only).
-w timeout Timeout in milliseconds to wait for each reply.
-R Use routing header to test reverse route also (IPv6-only).
-S srcaddr Source address to use.
-4 Force using IPv4.
-6 Force using IPv6.
david@Covet ~
$ ping -t 8.8.8.8
Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=13ms TTL=54
Reply from 8.8.8.8: bytes=32 time=13ms TTL=54
Reply from 8.8.8.8: bytes=32 time=13ms TTL=54
Reply from 8.8.8.8: bytes=32 time=13ms TTL=54
Reply from 8.8.8.8: bytes=32 time=13ms TTL=54
Reply from 8.8.8.8: bytes=32 time=14ms TTL=54
Reply from 8.8.8.8: bytes=32 time=14ms TTL=54
david@Covet ~
$
Я надеюсь, что это помогает кому-то, кому-то как это помогло мне.
Я знаю, что при реализации кода командной строки в C/C++ это поведение может контролироваться командой fflush() для очистки выходного буфера, fclose() будет делать то же самое.
Таким образом, это зависит от программы, которую вы запускаете, и от того, как часто они сбрасываются ().