回答編集履歴
2
補足
answer
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
|
10
10
|
「PHP SIGPIPE」「PHP シグナル」等でググっても、ノイズが多くてPHPがそうしている理由がわかりません。
|
11
11
|
|
12
|
-
試行錯誤で、これで行けるようです。`-i`を付ける。
|
12
|
+
試行錯誤で、これで行けるようです。シェルを対話モードにするために`-i`を付ける。
|
13
13
|
```PHP
|
14
14
|
$x = exec("sh -i -c 'tac access_log | grep -m 1 検索文字'");
|
15
15
|
```
|
16
|
-
おそらく、シェルを対話モードにするとシェルが起動されてからシグナル関連の設定をやり直すからと思われますが、詳しくは分からず。
|
16
|
+
これでうまくいく理由は、おそらく、シェルを対話モードにするとシェルが起動されてからシグナル関連の設定をやり直すからと思われますが、詳しくは分からず。
|
1
追記
answer
CHANGED
@@ -7,4 +7,10 @@
|
|
7
7
|
つまり、パイプの後段のプロセス(`grep`)が終了しても前段の`tac`は終了しません。
|
8
8
|
直接的には、それが原因です。
|
9
9
|
|
10
|
-
「PHP SIGPIPE」「PHP シグナル」等でググっても、ノイズが多くてPHPがそうしている理由がわかりません。
|
10
|
+
「PHP SIGPIPE」「PHP シグナル」等でググっても、ノイズが多くてPHPがそうしている理由がわかりません。
|
11
|
+
|
12
|
+
試行錯誤で、これで行けるようです。`-i`を付ける。
|
13
|
+
```PHP
|
14
|
+
$x = exec("sh -i -c 'tac access_log | grep -m 1 検索文字'");
|
15
|
+
```
|
16
|
+
おそらく、シェルを対話モードにするとシェルが起動されてからシグナル関連の設定をやり直すからと思われますが、詳しくは分からず。
|