body - title html definicion
Significado del código de salida 11 en C? (3)
¿Cuál es el significado general de un código de salida 11 en C? He mirado alrededor y no puedo encontrar una respuesta definitiva, así que pensé que podría preguntar aquí. Viene cuando intento agregar un elemento a un vector.
Las otras respuestas han perdido una posible ambigüedad en la frase "código de salida". Sospecho que lo que quería decir con "código de salida" es el código de estado recuperado con la familia de wait
de syscalls, como en:
/* assume a child process has already been created */
int status;
wait(&status);
printf("exit code %d/n", status);
Si haces algo así, es muy probable que veas "exit code 11" si el proceso secundario falla. Si el proceso hijo realmente llamó a exit(11)
es posible que vea "exit code 2816" en su lugar.
Sería mejor llamar a esas cosas "código de espera" o "estado de espera" en lugar de "código de salida", para evitar confusiones con el valor pasado para salir. Un código de espera contiene varias piezas de información agrupadas en un único entero. Normalmente, no debería mirar el número entero directamente (como lo hice arriba en ese printf
). En su lugar, debe usar las macros W*
de <sys/wait.h>
para analizarlo.
Comience con las macros WIF*
para descubrir qué tipo de cosas sucedieron, luego use esa información para decidir qué otras macros W*
usar para obtener los detalles.
if(WIFEXITED(status)) {
/* The child process exited normally */
printf("Exit value %d/n", WEXITSTATUS(status));
} else if(WIFSIGNALED(status)) {
/* The child process was killed by a signal. Note the use of strsignal
to make the output human-readable. */
printf("Killed by %s/n", strsignal(WTERMSIG(status)));
} else {
/* ... you might want to handle "stopped" or "continued" events here */
}
No hay un estándar definido qué códigos de salida debe establecer una aplicación en ciertas situaciones. ¡Es totalmente decisión del programador qué códigos de salida representan qué error o incluso éxito!
A veces los programadores deciden que cualquier valor diferente de cero señala un error, y en ocasiones este valor es igual a los códigos de error de los sistemas operativos.
En Windows, el código de salida 11 podría usarse debido a problemas con un archivo. Si desea la descripción de este código de error (que es específico de Windows y no necesariamente de su aplicación) ejecute net helpmsg 11
.
No encontraste una respuesta definitiva porque no hay una. Depende del autor del programa decidir qué códigos de salida desean usar. El estándar C solo dice que la exit(0)
o la exit(EXIT_SUCCESS)
indican que el programa es exitoso, y que la exit(EXIT_FAILURE)
indica un error de algún tipo. (Devolver un valor desde main
equivale a llamar a exit
con ese valor.) Los sistemas operativos más comunes, incluidos Windows, Linux, OSX, etc. usan 0 para tener éxito y valores de 1 a 255 para indicar errores; aún elegir entre códigos de error depende del escritor de la aplicación, el valor 11 no es nada especial.
Bajo Linux y la mayoría de las demás variantes de Unix, la señal número 11 indica una falla de segmentación , como lo remarcó Kerrek SB . Una falla de segmentación ocurre cuando un programa realiza algún tipo de acceso no válido a la memoria, por lo que es una consecuencia plausible de acceder a una matriz fuera de límites, o un error en la aritmética de punteros, o intentar acceder a un puntero nulo u otros errores relacionados con punteros. La señal 11 no es lo mismo que el código de salida 11: cuando un programa muere debido a una señal, se marca como una señal que lo mató, en lugar de haber salido normalmente. Las shells de Unix informan las señales informando un código de salida que es el número de señal más 128, por lo que 139 para una falla de segmentación.