Cygwin commands are intermittently hanging on Windows

Derek Pagel Derek.Pagel@infor.com
Mon Nov 7 22:06:46 GMT 2022


We've been encountering Cygwin commands that are intermittently hanging on Windows. We don't have any predictable way to reproduce it besides running commands in a loop until we encounter a hang. So, we've created a script that will loop and execute 5 different Cygwin commands (touch, cp, mv, which, and rm) and log any commands that take longer than a second. The script is set to loop 10,000 times which gives a handful of instances of hangs in the log that have taken anywhere from 10-200 seconds to complete. Has anyone else encountered hangs from Cygwin commands?

I've printed the script below for reference:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
use strict;
use Cwd;

my $TESTDIR = getcwd() . "\\test<file://test>";
my $MKDIRCMD = "mkdir test";
my $TOUCHCMD = 'touch test.txt';
my $CPCMD = 'cp test.txt test2.txt';
my $MVCMD = "mv test.txt " . $TESTDIR . "\\test.txt<file://test.txt>";
my $WHICHCMD = 'which explorer.exe';
my $RMCMD = "rm " . $TESTDIR . "\\test.txt test2.txt<file://test.txt%20test2.txt>";
my $count = 0;
my $fh;
my $LOG = open $fh, '>', 'cygwinTest.log';

if ( ! -e $TESTDIR ) {
                runCMD($MKDIRCMD, 0);
}

while ($count < 10000) {
                print "Loop $count:\n";
                runCMD($TOUCHCMD, $count);
                runCMD($CPCMD, $count);
                runCMD($MVCMD, $count);
                runCMD($WHICHCMD, $count);
                runCMD($RMCMD, $count);
                $count++;
}

sub runCMD {
                my $CMD = $_[0];
                my $COUNT = $_[1];
                my $retCode;
                my $startTime;
                my $endTime;
                my $totalTime;

                $startTime = time();
                $CMD = "C:\\Windows\\system32\\cmd.exe /c $CMD";
                $retCode = system($CMD);
                $endTime = time();
                $totalTime = $endTime - $startTime;
                if ($totalTime > 1 ) {
                                print $fh "Loop #$COUNT:\n";
                                if ($retCode == 0) {
                                                print $fh "It took $totalTime seconds to run [$CMD]\n";
                                } else {
                                                print $fh "It took $totalTime seconds to unsuccesfully run [$CMD]\n";
                                }
                }
}

close $fh;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~







More information about the Cygwin mailing list