tmuxのunixドメインソケットを消している犯人を特定したい
MacOS X El CapitanのiTerm2上でzshを起動し、そこから手でtmuxを起動しています。
そしてしばらく使っているといつのまにかtmuxのunixドメインソケット (以下「ソケット」) が消されてしまいます。
/private/var/folders/<途中省略>/T/tmux-501/default
にありますが、tmux-501
以下が消されてしまいます。消えるタイミングがまちまちで、おおむね数時間使っているといつの間にか消えている感じです。これが消えてしまうと tmux ls
などソケットを読み書きする機能を使ったとき
error connecting to /private/var/folders/<途中省略>/T/tmux-501/default (No such file or directory)
というエラーを報告してくるようになります。ソケットファイルが消えていることに気づくのはこのソケットを読み書きする機能を使った時であり、当然消えたタイミングではありません。つまりいつ消えたのかわかりません。このことから誰が消しているのか皆目見当がつかなくなっています。
ところでtmuxのmanを見ると、SIGUSR1
をtmuxのプロセスに送るとソケットファイルを作りなおしてくれる (ただし親ディレクトリがないと失敗する) との意味の記述があるので以下のようにやってみると復活できました。
$ mkdir -m700 /private/var/folders/<途中省略>/T/tmux-501
$ killall -SIGUSR1 tmux
このあと tmux ls
が正常に見えるようになります。
ディレクトリのパーミッションを700にしているのは、もともとtmuxが作ったディレクトリがそうだったのと、デフォルトの755のままだと作りなおしてくれなかったからであり、特に深い意味はありません。
実用上は作りなおせばいいので面倒なこと以外は問題ない気はします。が、誰が消しているのか気持ち悪くて仕方がありません。誰がいつ消しているのか特定できれば解決の糸口になる気がしています。特定する方法は何かありませんでしょうか?
2016/1/28 11:54追記
1秒毎にファイルが消えたかチェックして消えたら時刻を記録するシェルスクリプトを回していたところ消えた時刻を捕まえました。今日の11:42:56、コンソール.appでログを漁ってみるとこんなものが記録されていました。
2016/01/28 11:42:56.581 sandboxd[132]: ([52708]) PluginProcess(52708) deny file-write-unlink /private/var/folders/<中略>/C/com.apple.sandbox
2016/01/28 11:42:56.588 sandboxd[132]: ([52708]) PluginProcess(52708) deny file-write-unlink /private/var/folders/<中略>/C/com.apple.sandbox
2016/01/28 11:42:56.597 sandboxd[132]: ([52708]) PluginProcess(52708) deny file-read-data /private/var/folders/<中略>/C/com.apple.sandbox
2016/01/28 11:42:56.975 launchservicesd[79]: SecTaskLoadEntitlements failed error=22
2016/01/28 11:42:56.981 launchservicesd[79]: SecTaskLoadEntitlements failed error=22
2016/01/28 11:42:56.983 launchservicesd[79]: SecTaskLoadEntitlements failed error=22
最初から3つまでのエントリにはそれぞれコンソール.appが詳細情報ありと言ってきていて、1番目のエントリについてそれを表示させると以下のようになります。
PluginProcess(52708) deny file-write-unlink /private/var/folders/<中略>/C/com.apple.sandbox
Process: PluginProcess [52708]
Path: /System/Library/Frameworks/WebKit.framework/Versions/A/PluginProcess.app/Contents/MacOS/PluginProcess
Load Address: 0x2000
Identifier: com.apple.WebKit.PluginProcess
Version: 11601.4.4 (11601)
Build Info: 1-WebKit2~7601004004000000
Code Type: i386 (Native)
Parent Process: Safari [331]
Date/Time: 2016-01-28 11:42:56.401 +0900
OS Version: Mac OS X 10.11.3 (15D21)
Report Version: 8
<後略>
後略以降はコールスタックが続いているようです。これを見る限り webkit に関連するファイルのようで deny や unlink なんて出ていることから消すのに失敗したのでしょうか。その時に巻き込まれて tmux のソケットも消された? 全部推測ですけど。この時 safari で何をやっていたかというとなんとも覚えてないですね。
ログに記録された文言でぐぐってみていますけど芳しい情報を見つけられないでいます。とりあえずこういう事実があったということだけ書いておきます。次はソケットを監視しつつ safari をいじめてみることでしょうか。
2016/1/28 23:57追記
(server-start)
で起動する Emacs サーバの unix ドメインソケットも消されることがわかりました。同一犯による犯行なのかわかりませんが、ソケットを消しまくる奴がそんなにたくさんいるとは思えません。なんにしろ大変迷惑な話です。まいったな。こっちも M-x server-start
すりゃいいといえばいいんですがね…。