bash php silence segfault

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

php для создания segfault в расширении 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) 

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

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

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

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

    Я обнаружил, что использование нового экземпляра sh будет захватывать системные сообщения о смерти процесса, такие как «Дефект сегментации» и «Убитый».

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

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

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

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

    Из руководства Bash -> 3.2.4 Составные команды -> 3.2.4.3 Команды группировки и man bash :

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

    {list; }

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

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

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

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

     $ ( php pcre-bug.php ) &>/dev/null Segmentation fault (core dumped)