プログラマ探偵の事件簿:zshが私のプログラムを殺した!(zsh : killed)
助手の猫さんが布団で寝言をいいながらスヤスヤ寝ている寒い朝の事件である。
事件の始まり
開発しているTWSNMPシリーズのプログラムを総点検しようとしてMacのターミナルでプログラムを起動した時
zsh: killed ./dist/twsnmpfc.app -h
「zshが殺した!」
デバッグ用に起動しているプログラムは問題なく動いている。なぜだ!
プログラムに殺される理由はない
実行したプログラムに殺される理由があるのだろうか?
ウイルススキャンをしてみたが、問題ない。
fileコマンドで確認してみた。
$file ./dist/twsnmpfc.app
./dist/twsnmpfc.app: Mach-O 64-bit executable x86_64
Macで動く実行ファイルである。
zshはあちこちで殺している!
いつものようにGoogleさんに聞いてみた。
「zsh: killed」
を探すと、zshはあちこちで殺しているようである。
zshはサイコキラーか?
の歌が頭の中を流れる。
私も7月に、zshの殺人現場を目撃していた。
その時は、私が作ったプログラムではなかったので追求はしなかった。
ここにきて、私の子どものようなプログラムを殺すとは!
Googleさんに聞いた結果には、zshが私のプログラムを殺す理由が見つからなかった。
殺されないプログラムは何か違うのか?
同じソースコードから作ったデバッグのために起動しているプログラムは、zshに殺されない。
この違いがzshが殺す動機を知る鍵ではないか?
デバッグで動いているプログラムは/tmp/mainというところに
$go build -o /tmp/main .
のように作成(ビルド)している。/tmp/mainをターミナルから実行してみたが、問題ない。同じように作成して試したが、やはり殺される。
保存しているディレクトリの違いが、zshが殺す動機か?と思って、/tmpにコピーしてみたが、やはり殺される。
zshは、動機を自白する様子もない!
諦めかけた、その時、ひらめいた
殺されないプログラムとの違いは名前だ!
twsnmpfc.appをtwsnmpfc
にコピーして試してみた、殺されなくなった!
zshは.appが憎くて殺している
いろいろ試しているうちに、プログラムの名前に.app(拡張子)をつけるとzshが殺すことがわかった。他のプログラムも.appをつけると同じように殺された。
zshは、.appを憎んでいる
これが、殺す動機だった。
Mac OSでは、アプリを.appで終わるディレクトリに保存する。この名前をつけたプログラムを怪しんで無差別に殺しているのかもしれない。
昔は、そのようなことはなかったと思うが、サイバー戦争で殺伐とした時代の防衛手段として怪しいものを殺しているのかもしれない。
.appを変えて解決
ターミナルから実行する時に.appを削除したファイル名にして事件は解決した。
先代の助手の猫が天から
「プロセスは名前によって殺されることもある」
と言っている。
新人助手の猫さんは、何も知らず布団の中で寝ている。