tarが-1を返してきた?
とある場所で使っているGNU tarが終了ステータス*1-1を返してきたんです。そもそも終了ステータスに負の値ってどうなんですかって話ですが、失敗した原因がわからないと困るので-1が何を意味するかtarのソースコードを調べてみたんです。
#define TAREXIT_SUCCESS 0
#define TAREXIT_DIFFERS 1
#define TAREXIT_FAILURE 2
アレ?ない。
実はtarコマンドはシェルで実行しているのではなくて、PHPのpopen()関数から実行しているのです。pclose()関数の説明には
実行していたプロセスの終了ステータスを返します。
とあるので、終了ステータスはちゃんと渡ってきているはずなんですが。
仕方が無いのでPHPのソースコードを調べたら、どういう場合になのかはよくわからんのですが、-1を返している箇所が。
さらりとドキュメントに無い動作をするのはかんべんしておくれ…*2。
追記
ソースをよく見ると、システムコールのwaitpidがEINTRのエラーを返した場合にpopen()は-1を返しているようです。
EINTERの説明には
WNOHANG が設定されておらず、禁止 (block) されていないシグナルや SIGCHLD を受信した。
と書いてあり、WNOHANGは設定されていないのでtarが何か受信したみたいですが何を受信したのでしょうか兄さん頭が痛いよ。