cygwin:输出冻结,直到程序完成

cygwin:输出冻结,直到程序完成

我在 Windows XP 上使用 cygwin。

例如,Mercurial 存在问题。

假设我需要将我的 repo 和几个子 repo 推送到远程服务器。此操作大约需要 20 秒。

当我hg从拨打电话时cmd.exe,我可以看到实时的所有操作:

pushing subrepo ..... to .....
searching for changes

等等。一切都很好。

但是,当我从 cygwin 终端调用它时,我输入hg push,按 Enter,大约 20 秒内没有任何内容回显到控制台,然后所有日志立即出现。

为什么会这样?我该如何避免?

答案1

我在 cygwin 下使用 mercurial,没有遇到上述问题。这是 mercurial 的“原生”Windows 版本,还是 cygwin 版本?如果是前者,请尝试后者。

答案2

我知道这是一个老话题,但我在过去 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 ~
$

我希望这对某些人有帮助,任何人都可以像我一样帮助过他们。

答案3

我知道在 C/C++ 中实现命令行代码时,可以通过 fflush() 命令控制此行为来刷新输出缓冲区,fclose() 也会执行相同的操作。

所以,这取决于您正在运行的程序以及它们的 flush() 频率。

相关内容