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.