我有一个gawk程序,在尝试启动协同进程时会死掉。错误信息是"致命:无法打开双向管道`...'用于输入/输出(无法分配内存)"。启动协同处理时gawk进程的内存使用率约为50%。
gawk程序的结构如下:
BEGIN {
## Read big file into memory -- takes about 50% of memory
while ( (getline <"bigFile") >0) {
list[$0]
}
}
{
print |& "cat"
}
我假设启动协同进程涉及fork(),这会使内存使用量增加一倍,从而导致错误?
如果我在将文件加载到内存之前强制启动协同进程,则启动协同进程没有问题。但是我知道迫使协同进程启动的最好方法是给它写一个空行:
print "" |& "cat"
这显然不太理想。 (虽然我可以忍受它,如果没有更好的方法解决这个问题。)
关于这个问题的清洁解决方案的任何想法?