我有一台带有古老Hudson的Windows 7机器在Glassfish容器中运行。这运行由长cygwin bash脚本控制的构建。脚本的一部分包含一个循环:
if [ -d "$STASH_DIR" ]; then
svn status -v images | \
iconv -f cp1250 -t utf-8 | \
sed 's+\\+/+g' | \
grep '^ .*\.\(gif\|png\)$' | \
while read dummy rev author file; do
dat=${file%.???}.dat
if [ -f "$STASH_DIR/$dat.$rev" ]; then
cp -v "$STASH_DIR/$dat.$rev" "$dat"
fi
done || true # Not critical; ignore failures
fi
(有一堆图像和一个对它们进行操作的进程非常慢,因此我将它的结果缓存在一个单独的目录中。这个过程可能会更快,但这是另一个问题。)
现在,cp
偶尔会挂起文件列表中的某个位置。它进入无限循环吃CPU,我必须杀死它。当我这样做时,循环继续,构建完成。但由于它只是一个缓存,如果文件没有复制,构建仍然会成功。
所以我的问题是我有什么选择来解决这个问题?它在SYSTEM帐户下作为服务运行,但我确实有管理员权限,所以我可能能够附加一些内容。我只是不知道会有什么帮助。我有Visual Studio,可以在那里安装任何cygwin工具,但二进制显然不是用调试信息构建的。
编辑:我试过了:
resmon
除了流程全速运行外没有其他任何有趣的内容。bash.exe
,而它们是/usr/bin/cp
。cygwin1.dll
(仅限根框架),kernel32.dll
和{{1}的代码};没有框架指向可执行文件本身。handle.exe
只打开一个glassfish日志文件(ntdll.dll
),它的工作目录和C:\glassfishv3\glassfish\domains\domain1\logs\jvm.log
除此之外只有一堆名为C:\Windows
东西 尝试执行\BaseNamedObjects\
或完成时可能会失败,但我仍然不知道如何检查/调试它。