Есть ли способ перехватить код выхода дочерней команды при запуске через strace? - PullRequest
2 голосов
/ 09 апреля 2019

Я пытаюсь отследить файлы, участвующие в запуске модульного теста, используя strace. Есть ли способ, которым я могу захватить код выхода тестового прогона, пока я делаю это?

@cmd="php -d auto_prepend_file=auto_prepend_for_tests.php /data/tests/sdk/bin/phpunit.phar --configuration /data/tests/conf/database.xml
 my_test.php"
open(IN, "-|", "strace -ff $pid -e trace=file @cmd 2>&1")

1 Ответ

1 голос
/ 09 апреля 2019

Strace завершит работу с тем же кодом завершения, что и отслеживаемая программа. Пока все хорошо.

Открытое выглядит немного нелепо, это тот самый perl, о котором мы говорим? Тогда этот бит из perldoc -f open применяется:

Закрытие любого переданного файлового дескриптора приводит к тому, что родительский процесс ожидает потом заканчивается, затем возвращает значение статуса в $? а также "$ {^ CHILD_ERROR_NATIVE}".

Итак, да, вы можете получить код, вызвав close IN и посмотрев на значение в $?.

...