How do I exit a Rust program early from outside the main function?

rust, system

Solution

Rust 1.0 stable

`std::process::exit()` does exactly that - it terminates the program with the specified exit code:

use std::process;

fn main() {
    for i in 0..10 {
        if i == 5 {
            process::exit(1);
        }
        println!("{}", i);
    }
}

This function causes the program to terminate immediately, without unwinding and running destructors, so it should be used sparingly.

Alternative (not recommended) solution

You can use C API directly. Add `libc = "0.2"` to `Cargo.toml`, and:

fn main() {
    for i in 0..10 {
        if i == 5 {
            unsafe { libc::exit(1); }
        }
        println!("{}", i);
    }
}

Calling C functions cannot be verified by the Rust compiler, so this requires the `unsafe` block. Resources used by the program will not be freed properly. This may cause problems such as hanging sockets. As far as I understand, the proper way to exit from the program is to terminate all threads somehow, then the process will exit automatically.

Problem

I am in the process of writing a `bash` clone in Rust. I need to have my program exit when the user types `exit`. In previous iterations of my program, before I added more complicated features, I used `return` to get out of the loop that was prompting the user for input. This logic is now in a function, because of the way I am implementing built in shell functions, so when I `return` it just jumps out of the function back into the control loop, instead of short-circuiting the control loop and ending the program. I realize that I could probably return a boolean when the user types `exit` and exit the loop, but I would like to at least know if Rust has a way to terminate programs early, similar to Java's `System.exit()`, as this is useful for certain types of programs.

Original source