はじめに
「いい感じにTIMEOUTしてくれるだろう普通。」と思っていたら痛い目に合いました。
PHPで、とある監視プロセスをcron的に繰り返し実行しているときに、ログからプロセスが全くkillされないことに気づいた。
※そのプロセスの内部では、CURLコマンドを使って外の情報を取得してきている。
どうしてだろうと調べているときに、下記を上司に教えていただき頭の整理がつきました。
上司かつ以下のリンク著者に感謝です。
内容
結論
「CURLOPT_TIMEOUT」を設定していない状況で、端末へ映像などの情報を取得しに行く際に取得できなかったとき、無制限に待たされるとのこと。
詳細
CURLOPT_TIMEOUT
これは、端末へ接続にでき、映像などの情報を取得しに行くときに設定するTIMEOUTになります。
例)
「端末に接続で来たけど情報取得で待たされる。」
というときに、どれくらいでTIMEOUTするのかを設定する項目となっています。
ちなみに、「CURLOPT_CONNECTTIMEOUT」も適切に設定しなければ、端末への接続時に失敗したときに、デフォルト値が参照されたり設定されたものが適応されるので注意が必要です。
CURLOPT_CONNECTTIMEOUT
これは、端末へ接続しに行くときに設定するTIMEOUTになります。
例)
「端末に接続しに行こうとしたけど、待たされる。」
というときに、どれくらいでTIMEOUTするのかを設定する項目となっています。
以下参考
さらに、以下も注意しておきたいところです。
CURLOPT_CONNECTTIMEOUTはCURLOPT_TIMEOUTで表される時間のセグメントであるため、
CURLOPT_TIMEOUTの値はCURLOPT_CONNECTTIMEOUTの値より大きくする必要があります。
また、デフォルト値がどういう設定になっているかなどは以下を参考。