Sens du Code de Sortie 11 en C?
Quel est le sens général d'un code de sortie 11 en C? J'ai regardé autour et ne pouvez pas trouver une réponse définitive j'ai donc pensé que je voudrais poser ici. Il vient quand j'essaie d'ajouter un élément à un vecteur.
Êtes-vous sûr que vous voulez dire "code de sortie", et non pas signal 11?
Peut-être que vous êtes en train de mixer les codes de sortie et les codes de retour ou même le signal Kerrek mentionné. Montrer le code source qui provoque des problèmes.
Quelle plate-forme? Linux, Windows ou en général?
Peut-être que vous êtes en train de mixer les codes de sortie et les codes de retour ou même le signal Kerrek mentionné. Montrer le code source qui provoque des problèmes.
Quelle plate-forme? Linux, Windows ou en général?
OriginalL'auteur user3593148 | 2015-06-28
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas trouvé de réponse définitive car il n'existe pas. C'est à l'auteur du programme, décider de ce que les codes de sortie qu'il souhaite utiliser. C Standard ne dit que
exit(0)
ouexit(EXIT_SUCCESS)
indiquent que le programme est un succès, et queexit(EXIT_FAILURE)
indique une erreur de quelque sorte. (En renvoyant une valeur demain
est équivalent à l'appel deexit
avec cette valeur.) La plupart des systèmes d'exploitation, y compris Windows, Linux, OSX, etc. utilisez 0 pour la réussite et les valeurs de 1 à 255 pour indiquer des erreurs; encore le choix entre les codes d'erreur à l'application de l'écrivain, la valeur 11 n'est rien de spécial.Sous Linux et la plupart des autres variantes d'Unix, le signal numéro 11 indique un erreur de segmentation, comme remarqué par Kerrek SB. Une erreur de segmentation se produit lorsqu'un programme fait une sorte de mémoire non valide accéder, il est donc plausible conséquence de l'accès à un tableau en dehors des limites, ou une erreur dans l'arithmétique des pointeurs, ou essayer d'accéder à un pointeur null, ou d'autres pointeur liées à des erreurs. Signal 11 n'est pas la même chose que le code de sortie 11: lorsqu'un programme meurt en raison d'un signal, il est marqué comme ayant été tué par un signal, plutôt que d'avoir quitté normalement. Shells Unix rapport des signaux par la déclaration d'un code de sortie qui est le numéro du signal plus 128, afin de 139 pour une erreur de segmentation.
OriginalL'auteur Gilles
Les autres réponses ont manqué une possible ambiguïté dans l'expression "code de sortie". Je soupçonne ce que vous voulez dire par "code de sortie" est le code de statut récupérés avec les
wait
de la famille des syscalls, comme dans:Si vous faites quelque chose comme ça, on peut très bien voir "code de sortie 11" si l'enfant le processus de segmentation. Si le processus de l'enfant en fait appelé
exit(11)
vous pouvez voir "code de sortie 2816" à la place.Il serait mieux d'appeler les choses "code d'attente" ou "état d'attente" au lieu de "code de sortie", pour éviter la confusion avec la valeur passée à la sortie. Un code d'attente contient plusieurs éléments d'information emballés ensemble dans un seul entier. Normalement, vous ne devriez pas regarder en entier directement (comme je l'ai fait ci-dessus dans ce
printf
). Vous devez plutôt utiliser lesW*
macros de<sys/wait.h>
pour l'analyser.Commencer avec la
WIF*
macros pour savoir ce genre de chose s'est passé, puis utiliser ces informations pour décider lequel d'autresW*
macros à utiliser pour obtenir les détails.OriginalL'auteur Wumpus Q. Wumbley
Il n'y a pas de norme définie codes de sortie d'une application doit définir dans certaines situations. Il est tout à fait à l'programmeur de codes de sortie représentent l'erreur ou même succès !
Parfois, les programmeurs de décider que toute valeur différente de zéro signale une erreur, et parfois cette valeur est égale à l'exploitation des systèmes de codes d'erreur.
Sur Windows code de sortie 11 pourrait être utilisé en raison de problèmes avec un fichier. Si vous voulez la description de ce code d'erreur (ce qui est spécifique à Windows et pas nécessairement de votre application) exécuter
net helpmsg 11
.OriginalL'auteur Marged