flockでデッドロック

manにかかれている内容そのままではあるけれども、先日ハマったので記録しておく。

flock() によって作られるロックは、 オープンファイル記述 (open file description) (open(2) 参照) と関連付けられる。 したがって、ファイルディスクリプターの複製 (fork(2) や dup(2) などにより作成される) は同じロックを参照し、 これらのファイルディスクリプターのどれを使っても このロックを変更したり解放したりできる。 また、ロックの解放は、 上記の複数のファイルディスクリプターのいずれかに対して 明示的に LOCK_UN 操作を指示した場合か、これらのファイルディスクリプターがすべて 閉じられた場合に行われる。

https://linuxjm.osdn.jp/html/LDP_man-pages/man2/flock.2.htmlより

要はflockでロックを掛けた場合、大抵の場合はcloseでファイルディスクリプターを閉じればロックも解放されるのだけれども、そうではない場合もあるということ。この場合、複数のプロセスで同じファイルに対するファイルディスクリプターを持っているので、/proc/locksでロックを掛けたままになっているプロセスとinode番号を確認したあと、lsofコマンドでどのプロセスがそのinode番号のファイルをオープンしているかチェックすれば、ファイルディスクリプターを閉じていないプロセスがわかるはず。

「怒り」がスーッと消える本 水島広子

前々から怒りをうまくコントロールしたいと感じることが多かったので読んでみた。

相手に期待することのズレが怒りになる、ということから具体的に相手に何を期待しているのか、相手に実現可能か、などを一旦整理するあたりは大事かなと思った。「自分で考えろ」を引き受ける必要はない、というのは積極的に推進したいところ。上司に返すのは難しい感じもするが、、、

自分の感情のことであるので、実践するのはそう簡単なことではないのだけれども、感情を主体的にコントロールすることは意識したい。

「怒り」がスーッと消える本―「対人関係療法」の精神科医が教える
水島 広子
大和出版
売り上げランキング: 1,865