Stav ukončení - Exit status

Návratová z procesu v programování je malý počet přešla z podřízený proces (nebo volaným) do nadřazeného procesu (nebo volajícího) Po dokončení provádění konkrétní postup nebo úkol delegovat. V systému DOS to může být označováno jako úroveň chyb .

Když jsou spuštěny počítačové programy, operační systém vytvoří abstraktní entitu nazývanou proces, ve kterém se udržuje vedení účetnictví pro tento program. V operačních systémech s více úkoly, jako je Unix nebo Linux , lze nové procesy vytvářet pomocí aktivních procesů. Proces, který vytvoří další, se nazývá rodičovský proces , zatímco ty vytvořené jsou podřízené procesy . Podřízené procesy běží souběžně s nadřazeným procesem. Technika spawnování podřízených procesů se používá k delegování nějaké práce na podřízený proces, když není důvod zastavit provádění nadřazeného objektu. Když dítě dokončí provádění, ukončí se zavoláním systémového volání exit . Toto systémové volání usnadňuje předání kódu stavu ukončení zpět nadřazenému systému, který může tuto hodnotu načíst pomocí systémového volání čekání .

Sémantika

Rodič a dítě mohou porozumět významu výstupních stavů. Například je běžnou programovací praxí, že podřízený proces vrací (opouští) nulu nadřazenému, což znamená úspěch. Kromě této návratové hodnoty od dítěte mohou být nadřazenému procesu k dispozici také další informace, například o tom, jak byl proces ukončen, a to buď normálně, nebo signálem .

Specifická sada vrácených kódů je jedinečná pro program, který ji nastavuje. Obvykle to znamená úspěch nebo neúspěch. Hodnota kódu vráceného funkcí nebo programem může indikovat konkrétní příčinu selhání. V mnoha systémech platí, že čím vyšší je hodnota, tím závažnější je příčina chyby. Alternativně může každý bit indikovat jinou podmínku, která jsou poté vyhodnocena operátorem nebo společně, aby byla získána konečná hodnota; například fsck to dělá.

Někdy, pokud jsou kódy navrženy s ohledem na tento účel, mohou být použity přímo jako index větve po návratu do iniciačního programu, aby se zabránilo dalším testům.

AmigaOS

V AmigaOS , MorphOS a AROS jsou definovány čtyři úrovně:

  • Dobře 0
  • UPOZORNĚNÍ 5
  • CHYBA 10
  • PORUCHA 20

Shell a skripty

Skripty prostředí obvykle provádějí příkazy a zachycují jejich stavy ukončení.

Pro účely shellu byl příkaz, který skončí se stavem nulového ukončení, úspěšný. Nenulový stav ukončení indikuje selhání. Toto zdánlivě protiintuitivní schéma se používá, takže existuje jeden dobře definovaný způsob, jak indikovat úspěch, a různé způsoby, jak indikovat různé režimy selhání. Když je příkaz ukončen signálem, jehož číslo je N, shell nastaví proměnnou $? na hodnotu větší než 128. Většina prostředí používá 128+N, zatímco ksh93 používá 256+N.

Pokud příkaz není nalezen, měl by shell vrátit stav 127. Pokud je příkaz nalezen, ale není spustitelný, měl by být návratový stav 126. Všimněte si, že to není případ všech shellů.

Pokud příkaz selže kvůli chybě během rozšiřování nebo přesměrování, stav ukončení je větší než nula.

Jazyk C.

C programovací jazyk umožňuje programům ukončení nebo při návratu z hlavní funkce k úspěchu nebo neúspěchu signálu vrácením celé číslo, nebo vrácení makra EXIT_SUCCESS a EXIT_FAILURE. V systémech podobných Unixu se tyto hodnoty rovnají 0 a 1. AC program může také použít exit()funkci určující celočíselný stav nebo makro ukončení jako první parametr.

Návratová hodnota z mainje předána exitfunkci, která pro hodnoty nula, EXIT_SUCCESSnebo ji EXIT_FAILUREmůže přeložit do „implementace definované formy“ úspěšného ukončení nebo neúspěšného ukončení .

Kromě nuly a maker EXIT_SUCCESSa EXIT_FAILUREstandard C nedefinuje význam návratových kódů. Pravidla pro používání návratových kódů se na různých platformách liší (viz části specifické pro platformu).

DOS

V terminologii DOS, An errorlevel je číslo exit code vrátil pomocí spustitelného programu nebo podprogramu . Úrovně chyb se obvykle pohybují od 0 do 255. V systému DOS je k dispozici pouze 256 chybových kódů.

Stavy ukončení jsou často zachyceny dávkovými programy .

Jáva

V Javě lze volat jakoukoli metodu System.exit(int status), pokud to správce zabezpečení nepovolí. Tím bude aktuálně spuštěný Java Virtual Machine ukončen. "Argument slouží jako stavový kód; podle konvence nenulový stavový kód označuje abnormální ukončení."

OpenVMS

V OpenVMS je úspěch indikován lichými hodnotami a neúspěch sudými hodnotami. Hodnota je 32bitové celé číslo s dílčími poli: řídicí bity, číslo zařízení, číslo zprávy a závažnost. Hodnoty závažnosti jsou rozděleny mezi úspěch (úspěch, informační) a neúspěch (varování, chyba, fatální).

POSIX

V Unix a jiných systémech POSIX kompatibilní , která je mateřskou proces může získat návratový podřízeného procesu pomocí wait()rodinu systémových volání definovaných v wait.h . Z nich waitid() volání načte úplný 32bitový stav ukončení, ale starší wait()a waitpid() hovory načtou pouze nejméně významných 8 bitů stavu ukončení.

Rozhraní wait()a waitpid()nastavují stavovou hodnotu typu intzabaleného jako bitové pole s různými typy podřízených informací o ukončení. Pokud dítě skončilo ukončením (jak je určeno WIFEXITED()makrem; obvyklou alternativou je, že zemřelo na nezachycený signál ), SUS specifikuje, že 8 bitů nízkého řádu stavu ukončení lze načíst ze stavové hodnoty pomocí WEXITSTATUS()makra.

V waitid()systémovém volání (přidáno s SUSv1) stav podřízeného výstupu a další informace již nejsou v bitovém poli, ale ve struktuře typu siginfo_t.

Systémy kompatibilní s POSIX obvykle používají konvenci nula pro úspěch a nenulové pro chyby. Některé konvence se vyvinuly, pokud jde o relativní významy různých chybových kódů; GNU například doporučuje, aby kódy s vysokou bitovou sadou byly vyhrazeny pro závažné chyby.

Operační systémy odvozené z BSD definovaly rozsáhlou sadu preferovaných interpretací: Významy pro 15 stavových kódů 64 až 78 jsou definovány v sysexits.h . Ty historicky pocházejí z sendmailu a dalších agentů pro přenos zpráv , ale od té doby našly využití v mnoha dalších programech.

Z důvodů přenositelnosti definuje glibc makra EXIT_SUCCESS a EXIT_FAILURE. Průvodce Advanced Bash-Scripting Guide a /usr/include/sysexits.h obsahují některé informace o významu stavových kódů, které nemají hodnotu 0.

Okna

Systém Windows používá jako ukončovací kódy 32bitová celá čísla bez znaménka, přestože je interpret příkazů považuje za podepsané. Pokud proces nezdaří inicializaci, může být vrácen kód systémové chyby systému Windows.

Na výstupní kódy přímo odkazuje například interpret příkazového řádku CMD.exe v errorlevelterminologii zděděné z DOSu . Procesy .NET Framework a Windows PowerShell jej označují jako ExitCodevlastnost Processobjektu.

Viz také

Reference