What is the meaning of values from Java Process.exitValue()?

后端 未结 1 979
心在旅途
心在旅途 2021-02-06 14:08

I am using Process via ProcessBuilder to run an executable made in C code. I am catching the Process.exitValue() to react on this exit va

1条回答
  •  北海茫月
    2021-02-06 14:57

    If the system kills your application (like in the case of Segmentation fault) it sets the exit code to 128 + SIGNAL - see linux signal(7) manpage for signal values.

    Also, for linux, there are several default exit codes defined in sysexits.h header file, and it is recommended that programmers use those constants instead of manually defining own values. From exit(3) manpage:

    BSD has attempted to standardize exit codes; see the file .

    You can find the file for example here, and the values included are:

    #define EX_OK           0  /* successful termination */
    
    #define EX__BASE        64  /* base value for error messages */
    
    #define EX_USAGE        64  /* command line usage error */
    #define EX_DATAERR      65  /* data format error */
    #define EX_NOINPUT      66  /* cannot open input */
    #define EX_NOUSER       67  /* addressee unknown */
    #define EX_NOHOST       68  /* host name unknown */
    #define EX_UNAVAILABLE  69  /* service unavailable */
    #define EX_SOFTWARE     70  /* internal software error */
    #define EX_OSERR        71  /* system error (e.g., can't fork) */
    #define EX_OSFILE       72  /* critical OS file missing */
    #define EX_CANTCREAT    73  /* can't create (user) output file */
    #define EX_IOERR        74  /* input/output error */
    #define EX_TEMPFAIL     75  /* temp failure; user is invited to retry */
    #define EX_PROTOCOL     76  /* remote error in protocol */
    #define EX_NOPERM       77  /* permission denied */
    #define EX_CONFIG       78  /* configuration error */
    
    #define EX__MAX         78  /* maximum listed value */
    

    However, using them is not mandatory, and you are free to use any value you want.

    The general answer is - if your application fails gracefully (i.e. it is able to handle the error an finish execution), then it sets the exit code by itself. If the application is killed by the system, it's the system who sets the exit code.

    You can also see this thread for some additional information.

    0 讨论(0)
提交回复
热议问题