Pergunta

Se sim, em que o sistema operacional, shell ou qualquer outra coisa?

Considere o seguinte programa java (estou usando java apenas como um exemplo, qualquer língua seria bom para esta questão, que é mais sobre sistemas de operação):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

Executá-lo no Linux e bash, ele retorna sempre valoriza menos igual 255, por exemplo, (echo $? imprime o código de saída do comando anterior executado)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

EDITADO: o (único, até agora) resposta abaixo totalmente explicar o que acontece em UNIXes. Eu ainda estou querendo saber sobre outros sistemas operacionais.

Foi útil?

Solução

não é possível em Unix e derivados. A informação de estado de saída retornado consiste em dois campos de 8 bits, um que contém o estado de saída, e o outro contendo informação sobre a causa da morte (0 implicando saída ordenada sob o controlo do programa, outros valores indicando que um sinal matou, e indicando se um núcleo foi despejado).

Outras dicas

No moderno Windows, o sistema operacional em si, ea shell console default (CMD.EXE), aceitar e códigos de programa de saída ao longo de pelo menos toda a gama de inteiros assinados de 32 bits. Executando o seu exemplo acima em CMD.EXE dá os códigos de saída que você pediu:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows realmente não tem o conceito de sinais Unix, nem tentar seqüestrar o código de saída para adicionar informações extra, por isso, enquanto o seu shell (ou qualquer extremidades programa até a leitura do código de saída) não faz que quer, você deve receber de volta os códigos de saída que você devolvidos. Felizmente, os programas que usam tempo de execução do Microsoft C (incluindo todos os programas compilados com o MS Visual C ++) preservar o código de saída como é de sair processos.

Windows tem muitos mais códigos de saída, mais de 14.000. (Tenho certeza de que muitas vezes vi alguns deles em sua própria tela).

Aqui vem:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top