Stav ukončení - Exit status
The stav ukončení a proces v programování je malé číslo předané z a dětský proces (nebo volaný) na a nadřazený proces (nebo volající), když dokončí provádění konkrétního postupu nebo delegovaného úkolu. v DOS, lze jej označit jako úroveň chyb.
Při provádění počítačových programů se zobrazí operační systém vytváří abstraktní entita volal a proces ve kterém je udržováno vedení účetnictví pro tento program. V multitaskingových operačních systémech, jako je Unix nebo Linux, aktivní procesy mohou vytvářet nové procesy. Proces, při kterém se objeví další, se nazývá a nadřazený proces, zatímco ty vytvořené jsou dětské procesy. Podřízené procesy běží souběžně s nadřazeným procesem. Technika rozmnožování podřízených procesů se používá k delegování určité práce na podřízený proces, pokud není důvod zastavit provádění rodiče. Když dítě dokončí provádění, ukončí se voláním výstup systémové volání. Toto systémové volání usnadňuje předání výstupního stavového kódu zpět rodiči, který může tuto hodnotu načíst pomocí Počkejte systémové volání.
Sémantika
Rodič a dítě mohou porozumět významu stavů opuštění. Například je běžnou praxí programování, aby podřízený proces vrátil (ukončil) nulu nadřazenému, což znamená úspěch. Kromě této návratové hodnoty od dítěte jsou k dispozici další informace, například jak proces ukončil, buď normálně, nebo pomocí signál může být také k dispozici nadřazenému procesu.
Specifická sada vrácených kódů je jedinečná pro program, který ji nastavuje. Typicky to znamená úspěch nebo neúspěch. Hodnota kódu vráceného funkcí nebo programem může označovat konkrétní příčinu selhání. V mnoha systémech platí, že čím vyšší hodnota, tím závažnější příčina chyby.[1] Alternativně může každý bit indikovat jinou podmínku, která je potom hodnotí nebo operátor společně dát konečnou hodnotu; například, fsck dělá to.
Někdy, pokud jsou kódy navrženy s ohledem na tento účel, mohou být použity přímo jako index větví 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ě:
- OK 0
- POZOR 5
- CHYBA 10
- PORUCHA 20
Shell a skripty
Shell skripty obvykle vykonávají příkazy a zachycují jejich stav ukončení.
Pro účely shellu byl úspěšný příkaz, který končí se stavem nulového ukončení. 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 označit úspěch, a řada způsobů, jak označit 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 skořápek používá 128 + N, zatímco ksh93 používá 256 + N.
Pokud příkaz nebyl nalezen, měl by shell vrátit stav 127. Pokud je příkaz nalezen, ale nelze jej spustit, měl by být návratový stav 126.[2] To však neplatí pro všechny granáty.
Pokud příkaz selže kvůli chybě během rozšiřování nebo přesměrování, je stav ukončení větší než nula.
Jazyk C.
The C programovací jazyk umožňuje programům opouštět nebo se vracet z hlavní funkce signalizovat úspěch nebo neúspěch vrácením celého čísla nebo vrácením makra EXIT_SUCCESS
a EXIT_FAILURE
. V systémech podobných systému Unix se tyto hodnoty rovnají 0 a 1.[3] Program C může také použít výstup()
funkce určující stav celého čísla nebo výstupní makro jako první parametr.
Návratová hodnota z hlavní
je předán do výstup
funkce, která pro hodnoty nula, EXIT_SUCCESS
nebo EXIT_FAILURE
jej může přeložit do „formy definované implementací“ ve formátu úspěšné ukončení nebo neúspěšné ukončení.
Kromě nuly a maker EXIT_SUCCESS
a EXIT_FAILURE
, standard 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 sekce specifické pro platformu).
DOS
V terminologii DOS, an úroveň chyb je celé číslo výstup kód vráceno spustitelný program nebo podprogram. Úrovně chyb se obvykle pohybují od 0 do 255. V DOS k dispozici je pouze 256 chybových kódů.
Stavy opuštění jsou často zachyceny dávkové programy.
Jáva
V Javě může volat jakákoli metoda System.exit (stav int)
, pokud to správce zabezpečení nepovolí. Tím se ukončí aktuálně spuštěný Java Virtual Machine. „Argument slouží jako stavový kód; podle konvence nenulový stavový kód označuje neobvyklé ukončení.“[4]
OpenVMS
v OpenVMS, úspěch je indikován lichými hodnotami a selhání sudými hodnotami. Hodnota je 32bitové celé číslo s dílčími poli: kontrolní bity, číslo zařízení, číslo zprávy a závažnost. Hodnoty závažnosti se dělí mezi úspěch (úspěch, informace) a selhání (varování, chyba, fatální).[5]
POSIX
v Unix a další Systémy kompatibilní s POSIX, nadřazený proces může načíst stav ukončení podřízeného procesu pomocí Počkejte()
rodina systémových volání definovaných v počkej. h.[6] Z nich waitid ()
[7] volání načte stav úplného 32bitového ukončení, ale starší Počkejte()
a waitpid ()
[8] volání načtou pouze nejméně významných 8 bitů stavu ukončení.
The Počkejte()
a waitpid ()
sada rozhraní a postavení hodnota typu int
zabaleno jako bitfield s různými typy informací o ukončení dítěte. Pokud dítě skončilo opuštěním (podle určení WIFEXITED ()
makro; obvyklá alternativa spočívá v tom, že zemřelo na nezachycené signál ), SUS specifikuje, že 8 bitů nízkého řádu stavu ukončení lze načíst z hodnoty stavu pomocí WEXITSTATUS ()
makro.
V waitid ()
systémové volání (přidáno pomocí SUSv1), stav podřízeného ukončení a další informace již nejsou v bitovém poli, ale ve struktuře typu siginfo_t
.[9]
Systémy kompatibilní s POSIXem obvykle používají konvenci nuly pro úspěch a nenulovou pro chybu.[10] Některé konvence se vyvinuly, pokud jde o relativní význam různých chybových kódů; například GNU doporučuje, aby kódy s nastaveným vysokým bitem byly vyhrazeny pro závažné chyby,[3].
Operační systémy odvozené od 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. [11] Ty historicky pocházejí z poslat mail a další agenti pro přenos zpráv, ale od té doby našli použití v mnoha dalších programech.[12]
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ů ukončení, které nemají hodnotu 0.[13]
Okna
Okna jako výstupní kódy používá 32bitová celá čísla bez znaménka,[14] tlumočník příkazů s nimi zachází jako s podepsanými.[15] Pokud proces selže při inicializaci, může být vrácen kód chyby systému Windows.[16][17]
Výstupní kódy jsou přímo odkazovány, například interpretem příkazového řádku CMD.exe v úroveň chyb
terminologie zděděná z DOS. .NET Framework procesy a Windows PowerShell odkazovat na to jako ExitCode
majetek Proces
objekt.
Viz také
Reference
- ^ „Úrovně chyb“. Skriptovací stránky Roba van der Woudeho. Citováno 2007-08-26.
- ^ "Jazyk příkazů prostředí - Stav ukončení příkazů". Otevřená skupina. Citováno 7. července 2015.
- ^ A b „Referenční příručka knihovny GNU C 25.6.2: Stav ukončení“. Gnu.org. Citováno 2012-07-09.
- ^ „Java 1.6.0 API“. slunce. Citováno 2008-05-06.
- ^ "Formát OpenVMS hodnot návratového stavu". H71000.www7.hp.com. Archivovány od originál dne 19. 3. 2012. Citováno 2012-07-09.
- ^ Specifikace Single UNIX, Vydání 7 od Otevřená skupina - Referenční příručka základních definic,
- ^ Specifikace Single UNIX, Vydání 7 od Otevřená skupina - Reference systémových rozhraní,
- ^ Specifikace Single UNIX, Vydání 7 od Otevřená skupina - Reference systémových rozhraní,
- ^ „2.4.3 Akce signálu“. Otevřená skupina. Citováno 2019-02-08.
- ^ "Kapitola 6. Výstup a stav ukončení". Nejčastější dotazy. Citováno 2012-07-09.
- ^ FreeBSD Funkce knihovny Manuál : preferované výstupní kódy pro programy -
- ^ Vyhledávání Google na «" sysexits.h "stránky: github.com» zprávy «Asi 3 540 výsledků»; vyvoláno 21. února 2013 01:30 UTC
- ^ http://tldp.org/LDP/abs/html/exitcodes.html
- ^ "Funkce ExitProcess". Citováno 2016-12-16.
- ^ „ExitCodes větší než 255, možné?“. Citováno 2009-09-28.
- ^ „Kódy systémových chyb systému Windows (kódy ukončení)“. Citováno 2009-09-28.
- ^ "MSDN article Kódy systémových chyb". Microsoft.