Как очистить программу кодом выхода?

22

Есть ли способ вернуть код выхода в Rust 1.0?

Я пробовал env::set_exit_status(exit_code); , но это порождает ошибку компилятора.

Существует также этот вопрос: Запуск программы Rust early , который похож, но спрашивает о когда процесс должен быть завершен раньше.

EDIT: Я ищу решение, которое также позволит процессу убирать стек, вызывать деструкторы и т. д.

    
задан Thomas Bratt 17.05.2015 в 00:03
источник
  • @static_rtti Можете ли вы объяснить, какая часть ответа Левана не подходит? Разумеется, язык системного программирования ... помните, что Rust также должен использоваться в средах, где нет процесса запуска (например, ядро). –  Shepmaster 17.06.2015 в 21:01
  • Я не читал его достаточно хорошо, это звучит так, как я хочу. –  static_rtti 18.06.2015 в 09:57

2 ответа

28

Построение комментариев @ FrancisGagné , если вы ищете эквивалент C return exit_code , вы можете искусственно построить его таким образом:

fn main() {
    let exit_code = real_main();
    std::process::exit(exit_code);
}

fn real_main() -> i32 {
    // the real program here
}

Таким образом, все объекты вашей программы будут находиться в пределах функции real_main() , и вы можете безопасно использовать return exit_code; в main , все еще имея все деструкторы, правильно выполняемые.

Было бы более целесообразно использовать std::env::set_exit_status(..) , но эта функция еще не находится в стабильной Rust.

    
ответ дан Levans 17.05.2015 в 10:56
8

std::process::exit выходит из программы с указанным кодом выхода.

    
ответ дан Francis Gagné 17.05.2015 в 00:07
  • К сожалению, он не очищает и не вызывает деструкторы. Я исправлю вопрос, чтобы упомянуть об этом. –  Thomas Bratt 17.05.2015 в 00:09
  • Любая причина, по которой вам нужно, чтобы очистка произошла? У вас есть деструкторы, которые делают «интересные» вещи? Если нет, то, чтобы очистить операционную систему, процесс часто достаточно хорош. –  Francis Gagné 17.05.2015 в 00:18
  • Я предполагаю, что ищу прямую замену return exit_code; в C. Я бы хотел избежать возможности не промывать диск и т. д., если это вообще возможно. –  Thomas Bratt 17.05.2015 в 00:22