Bash PHP тишина Segfault

Мне нужно, чтобы предотвратить все выход PHP, https://stackoverflow.com/a/617184/1695680 описывает, как это сделать в целом и, за исключением ошибок, синтаксических ошибок, пока это работает, но.

php для создания ошибки в расширении pcre:
https://ilia.ws/archives/5_Top_10_ways_to_crash_PHP.html

<?php
# prce-bug.php

preg_match('/(.(?!b))*/', str_repeat("a", 10000));

В моем тестировании это все еще выводит:

user@host ~/crash-php $ php pcre-bug.php
Segmentation fault (core dumped)

user@host ~/crash-php $ php pcre-bug.php  >/dev/null 2>&1
Segmentation fault (core dumped)

Таким образом, даже с перенаправлением вывода оболочки вывод поступает на мой терминал.

2

Решение

Перенаправление вывода применяется к процессу, однако сообщение segfault генерируется самим bash в результате смерти дочернего процесса с segfault.

Одним из решений было бы сделать что-то вроде этого:

echo `php pcre-bug.php >/dev/null 2>&1`
1

Другие решения

Я обнаружил, что используя новый sh Экземпляр оболочки будет регистрировать системные смерти, о которых сообщалось, например, Segmentation Fault и Killed.

sh -c 'php pcre-bug.php' >/dev/null 2>&1

Однако входные аргументы идут не в php, а в экземпляр sh, который ничего с ними не делает.

1

Вы можете использовать составные команды { }:

$ { php pcre-bug.php; } &>/dev/null
$
$ echo $?
139

От Руководство по Bash -> 3.2.4 Составные команды -> 3.2.4.3 Группировка команд а также man bash:

Составные команды

{список; }

Список просто выполняется в текущей среде оболочки. список должен быть
завершается новой строкой или точкой с запятой.

Это известно как групповая команда. Статус возврата — это статус выхода
из списка. Обратите внимание, что в отличие от метасимволов (и), {и}
зарезервированные слова и должны встречаться, когда зарезервированное слово разрешено
распознан.

Поскольку они не вызывают разрыв слова, они должны быть отделены от списка
пробелом или другим метасимволом оболочки.

Однако, используя ( ) не работает, и я не знаю почему:

$ ( php pcre-bug.php ) &>/dev/null
Segmentation fault (core dumped)
1
По вопросам рекламы [email protected]