之前用 awk 練習,[Unix] 簡易分析 Squid 產生的 log @ FreeBSD,結果最近跑的時候開始碰到這個問題:Too many open files,一時之間還以為是自己程式的 bug,最後發現是 awk 裡有用到 pipe 等相關開檔動作,做完要記得 close 就行了。

簡易範例:

awk  ' { data[$1]++ } END { for( d in data ) { cmd = "wc -l /tmp/file";  cmd | getline result ;  close( cmd );   print result;   }   }'

由於是跑迴圈,資料多筆時就會碰到 Too many open files 的問題,只要把每個 pipe 或 file 相關的動作都有 close 掉就能解決囉。


changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()