Как да накарам bash да определи дали детето е направило segfault?

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

Общият подход е да се изпълнят всички тестове паралелно, това се прави чрез сглобяване на командите заедно и прехвърляне на командите в xargs -P 0 -L 1 -I CMD bash -c CMD, след което искам да хвана всеки от тези вътрешни процеси, които са се повредили, и да ги стартирам отново последователно под gdb. Обърнете внимание, че това е различно нещо от улавянето на техните върнати стойности, които ще продължа да третирам за целите на преминаване/неуспех на теста.

Очевидно тестът за segfaulting е неуспешен тест... въпросът е да го накарате да генерира автоматично gdb сесия с уловена segfault, за максимална продуктивност :)

Знам, че макросът WTERMSIG може да се използва в C, за да се провери дали дъщерен процес е смутен, след като излезе. Със сигурност бих могъл да напиша малка C/C++ помощна програма, която да приложи това решение вместо мен, но би било хубаво, ако имаше вграден начин да направя това с bash.


person Steven Lu    schedule 14.07.2021    source източник
comment
Може би свързано?: Какъв код на грешка връща процес, който връща segfaults?   -  person James Brown    schedule 14.07.2021
comment
За проста команда в bash, ако командата завърши със сигнал, нейната върната стойност ще бъде 128+n, където n е номерът на сигнала (11 за SIGSEGV), така че бих очаквал проверката дали върнатата стойност е 139 ще бъде достатъчна. Имайте предвид, че самият xargs ще върне 125, ако командата бъде убита от сигнал.   -  person Hasturkun    schedule 14.07.2021
comment
Много полезни коментари, благодаря. Определено е добре да знаете за тези половинчати решения.   -  person Steven Lu    schedule 14.07.2021