GNU/Linux >> Znalost Linux >  >> Linux

Jaký je ukončovací kód programu, když selžeasses()?

Je to specifické pro implementaci. Můžete udělat toto:

int main()
{
    assert(0);
}

Poté jej spusťte:

./a.out
echo $?

1 (<- nebo cokoliv jiného)

To vám alespoň napoví, co můžete od svého nastavení očekávat. Dostávám 134 na několika linuxových boxech s GCC i g++.


Standard C99 (nezměněn v C11) uvádí, že assert volá abort a abort stuff uvádí toto o návratovém kódu:

Implementací definovaná forma stavu neúspěšné ukončení je vrácena do hostitelského prostředí pomocí volání funkce raise(SIGABRT) .

Je to zdokumentováno v sekci 7.2.1.1 (uplatnění) a 7.20.4.1 (zrušení) standardu C99 zde.

Mnoho systémů UNIX vrátí 128 plus číslo signálu (SIGABRT je signál číslo 6), takže můžete získat 134. Cokoli dostanete, mělo by to být zdokumentováno implementací C.

Zde najdete například gcc . I když o tom, co se vrátí do volajícího prostředí, docela mlčí. Z konkrétních sekcí zde:

Některé volby jsou prováděny knihovnou a operačním systémem (nebo jiným prostředím při kompilaci pro volně stojící prostředí); podrobnosti naleznete v jejich dokumentaci.

A tady:

Chování většiny těchto bodů závisí na implementaci knihovny C a není definováno samotným GCC.

Stejně tak glibc doco zde při ukončení programu (konkrétně bit statusu ukončení). Zmiňuje konvence, ale žádná pevná pravidla.


Linux
  1. Výchozí kód ukončení při ukončení procesu?

  2. Co se stane, když spustím příkaz Cat /proc/cpuinfo?

  3. Co se přesně stane, když spustím soubor v prostředí Shell?

  1. Nedaří se vám získat správný výstupní kód ze skriptu?

  2. Jak získat další informace o původu výstupního kódu?

  3. Co jsou výstupní kódy Bash v Linuxu

  1. zavolejte funkci po dokončení programu pomocí ctrl c

  2. Jaká je maximální velikost hodnoty proměnné prostředí Linux?

  3. Jaký je význam caddr_t a kdy se používá?