TL; DR
Когда я запускаю свои тесты на основе Google Test через ctest
, эти тесты видят дескриптор открытого файла, который они не открыли. Мне интересно, как этот файловый дескриптор не будет виден моим тестам.
Справочная информация
В настоящее время я работаю над проектом Linux -specifi c, который выполняет двоичные файлы и выполняет магию c с использованием ptrace. Моя цель - сделать исполнителя как можно более невидимым, чтобы исполняемые двоичные файлы не имели понятия, что они запускаются как-то необычно. Таким образом, я должен убедиться, что исполнитель закрывает все файловые дескрипторы, которые он использует для конфигурации между fork
и exec
. Я написал простой тест, чтобы убедиться, что исполняемая программа соблюдает только стандартные файловые дескрипторы 0
, 1
и 2
, но не запускается при запуске через CTest и завершается успешно, если запускается вручную как исполняемый файл.
Я использую
- Ubuntu 18.04
- clang 9.0
- CMake 3.16.3
Пример проекта
Вот минимальный проект, который иллюстрирует проблему:
https://gist.github.com/lfyuomr-gylo/2286c5eddf4385a4ae311c230078c5b6
Вопросы
- Это ошибка или функция? Для меня это кажется ошибкой, так как я понятия не имею, с какой целью этот дополнительный файловый дескриптор может оставаться открытым перед выполнением моего теста, но я довольно плохо знаком с инфраструктурой C ++ и могу что-то упустить.
- Есть ли способ решить проблему без изменения тестового кода, т. Е. Манипулировать флагами
ctest
?