システムコールの周辺の勉強をしています。
Go言語初心者です。
わからないこと
質問はタイトルの通りなのですが、実行しているGoプログラムのプロセスのファイルディスクリプタの数を意図的に増やして、「Too many open files」のエラーを出したいのですが、なかなかうまくいきません。
こちらのサイトにRuby(?)のコードでファイルを大量にopenさせ、このエラーを出していますが、これをGoのコードで実装したいと考えています。
試してみたこと
以下のようなコードを書いてみました。
package main import ( "os" "strconv" "time" ) func main() { for i := 1; i < 1000; i++ { path := "many_files/test_" + strconv.Itoa(i) + ".txt" file, err := os.Create(path) if err != nil { panic(err) } file.Write([]byte("os.File example\n")) } time.Sleep(30 * time.Second) }
closeをせずに1000ファイルほど作り、そこに書き込みをするというループを回しています。
最後にsleepを入れてプロセスを確認する時間を設けています(ここも、正しいのかわかりません)
これをcentOS上で実行し、psコマンドでPIDを確認した後、# ls /proc/<PID>/fd
のようにして、ファイルディスクリプタの数を確認しています。
しかし、この方法では上手く行かず、0 1 2 4
としか表示されません。
どこに問題があるのでしょうか。
また、あまり関係ないですが、上記のコードの中に「Goではあまりこんな書き方しないよ」という部分があれば、それも指摘していただけると嬉しいです。
ご教示よろしくお願いします。
あなたの回答
tips
プレビュー