Códigos de Saída maiores que 255, possíveis?

Se sim, em qual sistema operacional, shell ou o que?

Considere o seguinte programa java (estou usando java apenas como um exemplo, qualquer linguagem seria boa para essa pergunta, que é mais sobre sistemas operacionais):

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

Executando-o no Linux e bash, ele retorna sempre valores menores que 255, por exemplo, ( echo $? Imprime o código de saída do comando executado anterior)

 > 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: a resposta (apenas, até agora) abaixo explica completamente o que acontece nos UNIXes. Eu ainda estou me perguntando sobre outros sistemas operacionais.

Não é possível no Unix e derivados. As informações de status de saída retornadas consistem em dois campos de 8 bits, um contendo o status de saída e o outro contendo informações sobre a causa da morte (0 implicando saída ordenada sob controle de programa, outros valores indicando que um sinal o matou e indicando se um núcleo foi despejado).

No Windows moderno, o próprio SO e o shell de console padrão ( CMD.EXE ) aceitam e mostram os códigos de saída em pelo menos o intervalo inteiro de inteiros assinados de 32 bits. A execução do seu exemplo acima no CMD.EXE fornece os códigos de saída solicitados:

 > 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 

O Windows não tem realmente o conceito de sinais Unix, nem tenta seqüestrar o código de saída para adicionar informações extras, desde que seu shell (ou qualquer outro programa acabe lendo o código de saída) também não faça isso, você deve recuperar os códigos de saída retornados. Felizmente, os programas que usam o tempo de execução C da Microsoft (incluindo todos os programas compilados com o MS Visual C ++) preservam o código de saída, pois ele sai dos processos.

O Windows tem muito mais códigos de saída, mais de 14.000. (Tenho certeza que você viu muitas vezes em sua própria canvas).

Aí vem:

  • Uma lista de códigos de saída do Windows .
  • Script do PowerShell para testá-los .