# class SystemExit

Raised by `exit` to initiate the termination of the script.

### Public Class Methods

new → system_exit click to toggle source
new(status) → system_exit
new(status, msg) → system_exit
new(msg) → system_exit

Create a new `SystemExit` exception with the given status and message. Status is true, false, or an integer. If status is not given, true is used.

    static VALUE
    exit_initialize(int argc, VALUE *argv, VALUE exc)
    {
        VALUE status;
        if (argc > 0) {
            status = *argv;

            switch (status) {
              case Qtrue:
                status = INT2FIX(EXIT_SUCCESS);
                ++argv;
                --argc;
                break;
              case Qfalse:
                status = INT2FIX(EXIT_FAILURE);
                ++argv;
                --argc;
                break;
              default:
                status = rb_check_to_int(status);
                if (NIL_P(status)) {
                    status = INT2FIX(EXIT_SUCCESS);
                }
                else {
    #if EXIT_SUCCESS != 0
                    if (status == INT2FIX(0))
                        status = INT2FIX(EXIT_SUCCESS);
    #endif
                    ++argv;
                    --argc;
                }
                break;
            }
        }
        else {
            status = INT2FIX(EXIT_SUCCESS);
        }
        rb_call_super(argc, argv);
        rb_ivar_set(exc, id_status, status);
        return exc;
    }

### Public Instance Methods

status → integer click to toggle source

Return the status value associated with this system exit.

    static VALUE
    exit_status(VALUE exc)
    {
        return rb_attr_get(exc, id_status);
    }

success? → true or false click to toggle source

Returns `true` if exiting successful, `false` if not.

    static VALUE
    exit_success_p(VALUE exc)
    {
        VALUE status_val = rb_attr_get(exc, id_status);
        int status;

        if (NIL_P(status_val))
            return Qtrue;
        status = NUM2INT(status_val);
        return RBOOL(WIFEXITED(status) && WEXITSTATUS(status) == EXIT_SUCCESS);
    }