タグ

ブックマーク / chromaprog.blog101.fc2.com (2)

  • クロマの戯れごと 奇妙で不可解なptrace (Linux)

    自分用メモ2。 トレース関数ptrace()には、対象プロセスがforkしたりexecすると報告してくれる便利機能があるんですが、この仕様が不可解というか私が勘違いしていたかもしれないというお話です。 この報告機能ですが、ptrace(PTRACE_SETOPTION) で報告して欲しいオプションを設定します。 すると、waitpidしているときに、イベントが発生するとSIGTRAPに混ぜて報告してくれるという仕様です。 イベントの詳細データ(どのプロセスIDでとまったかとか)は、PTRACE_GETEVENTMSGで取得することが可能です。 で、実際やってはみたのですが、どうもウマく報告してくれなかったり意図しない動作をするときがあるようで、カーネルとか色々調べ倒して、なんとか一定の解がえられました。 1.PTRACE_SETOPTIONするときは対象元をとめておくべし PTRACE_S

  • クロマの戯れごと Linuxの共有メモリ(shm_open系)はただのファイルマップ?

    あるシステムで、shm_openとやったときに、なぜか失敗してエラーコードにENOSYSが帰ってくることがあって、 「まさか共有メモリがノーサポートなわけなかろう、、、」 ということで調査してみました。 すると、どうやらLinux(glibcのLinuxの実装)ではまず/dev/shmの存在を確認してから、もしそれが無い場合は、/proc/mountsを調べて、tmpfsかshmfsの存在を調べるみたいでした。 それもなければENOSYSと。。。。 glibcのソースをみてようやく判りました。 結局Tmpfsでマウントしたディレクトリ以下に、なんらかのファイルを作ってるだけという感じですね。 で、まぁあとはmmapとかしますわな。 ということで、適当なディレクトリを作って、tmpfsでmountしてやるとENOSYSも返さずにさくさく動きました。 というか、この動作よくよく考えて見ますと、

  • 1