С точки зрения Linux-shell, любой процесс после завершения фиксирует код ошибки и его можно посмотреть через
echo $?
и принять решение что делать дальше. Значения кодов ошибок - специфичны для каждого приложения. Считается хорошим тоном чтобы програмист процесса сохранял туда осмысленные значения перед выходом. В С++ то это что возвращается из main - функции.