ハードなソフトの話

アクセスカウンタ

zoom RSS gnupack 12: Win8.1 x64 で man のfork エラーを解消する

<<   作成日時 : 2015/04/26 10:55   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 0 / コメント 0

現象: man を実行するとforkエラーで終了

64bit 版Windows 8.1でmanを実行すると、下記のようにエラーで終了する:

image

      2 [main] man <プロセスID> fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFEA0000 != 0x0 mem alloc base 0xFFEA0000, state 0x1000, size 20480, Win32 error 487

この現象は32bit版Windows8.1/64bit版および32bit版のWindows 7では発生しない。

対処方法: Cygwinの初期ヒープサイズを設定する

peflags を使って下記のようにCygwinがmanに割り当てる初期ヒープサイズを4096MBに設定し、PCを再起動する

peflags ?z4096 /usr/bin/man

再びmanを実行すると下記のように正しく表示される:

image

※日本語の文字化けが発生する場合は「gnupack 12: man の文字化け解消方法」を参照。

原因:Windows 8.1のWOW64の問題か?

man は移動時に複数個のプロセスにforkする。このときにエラーが発生していた。

この現象は32bit版Windows8.1のWindows 7で発生しない。つまり、rebaseの問題ではない

この現象は64bit版Windows 7でも発生しない。つまり、64bit版Windows 8.1固有の問題である。

いずれにしろ、必要なメモリが割り当てられていないことが問題である。

peflagsで/usr/bin/manについて調べた。

/usr/bin/man のcygwinヒープの初期値は0になっていた。これはヒープサイズの初期割り当てをCygwinに任せることを意味する。

自動的な割り当てに失敗している可能性がpeflagsでこの値を変更したら問題が解決した。

試したらできただけなので、指定したヒープサイズ適切なサイズかどうかは不明である。

また、何らかの理由でcygwinヒープの値は記憶されるので、peflagsを実行してサイズを変更した場合は、PCを再起動しないと内容が反映されない場合がある。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
gnupack 12: Win8.1 x64 で man のfork エラーを解消する ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる