Apa perbedaan antara Exit (0) dan Exit (1) di C?

97

Adakah yang bisa memberitahuku? Apa perbedaan antara exit(0)dan exit(1)dalam bahasa C?

Yu Hao
sumber

Jawaban:

118

Apa perbedaan antara exit(0)dan exit(1)dalam bahasa C?

exit(0)menunjukkan penghentian program yang berhasil & ini sepenuhnya portabel, Sementara
exit(1)(biasanya) menunjukkan penghentian yang tidak berhasil. Namun, penggunaannya tidak portabel.

Perhatikan bahwa standar C mendefinisikan EXIT_SUCCESSdan EXIT_FAILUREmengembalikan status terminasi dari program C.

0dan EXIT_SUCCESSmerupakan nilai yang ditentukan oleh standar untuk menunjukkan penghentian yang berhasil, namun, hanya EXIT_FAILUREnilai standar untuk mengembalikan penghentian yang tidak berhasil. 1digunakan untuk hal yang sama di banyak implementasi.


Referensi:

C99 Standar: 7.20.4.3 exitFungsi
Para 5

Akhirnya, kontrol dikembalikan ke lingkungan host. Jika nilai status nol atau EXIT_SUCCESS, bentuk implementasi status penghentian sukses dikembalikan. Jika nilai status adalah EXIT_FAILURE, bentuk implementasi yang ditentukan dari status tidak berhasil dihentikan dikembalikan. Jika tidak, status yang dikembalikan akan ditentukan oleh implementasi.

Alok Save
sumber
1
Bisakah Anda menjelaskan non-portabilitas? Secara khusus, kode keluar bukan nol menunjukkan mode kegagalan yang berbeda. Biasanya aplikasi menggunakan ini untuk memberikan informasi lebih lanjut. Dengan demikian, konstanta tunggal ( EXIT_FAILURE) tidak cukup.
Konrad Rudolph
@KonradRudol: Saya menambahkan kutipan yang relevan. Semoga membantu.
Alok Hemat
1
@Als: POSIX adalah standar. C standar mungkin mengatakan "pelaksanaan yang ditetapkan" tapi itu tidak sama dengan mengatakan "tidak portabel", ketika implementasi sebenarnya melakukan menyepakati konvensi.
Cat Plus Plus
1
@PeterM: Carikan saya platform yang tidak menggunakan konvensi ini. Ini mungkin menjadi lingkungan khusus / tertanam / berdiri bebas / apa pun, di mana portabilitas exitadalah yang paling tidak menjadi perhatian Anda (sih, mungkin bahkan tidak ada pustaka C yang tersedia di sana. NOTHING IS PORTABLE !!! 111).
Cat Plus Plus
3
@CatPlusPlus: Di OpenVMS, memanggil exitdengan nilai ganjil menunjukkan keberhasilan. exit(0)diperlakukan sebagai kasus khusus demi kesesuaian C. Ya, POSIX adalah standar, tetapi tidak semua sistem sesuai dengannya. Jika Anda ingin menulis kode yang mengasumsikan POSIX, Anda bebas melakukannya, tetapi itu membatasi portabilitas kode Anda.
Keith Thompson
12

exit dalam bahasa C mengambil bilangan bulat yang mewakili status keluar.

Keluar dari Sukses

Biasanya, status keluar 0 dianggap berhasil, atau keluar yang disengaja yang disebabkan oleh eksekusi program yang berhasil.

Keluar dari Kegagalan

Status keluar 1 dianggap gagal, dan yang paling umum berarti program harus keluar karena alasan tertentu, dan tidak berhasil menyelesaikan semua hal dalam alur program normal.

Berikut Sumber Daya GNU berbicara tentang Status Keluar.


Seperti yang telah dinyatakan @Als, dua konstanta harus digunakan di tempat 0 dan 1.

EXIT_SUCCESS didefinisikan oleh standar menjadi nol.

EXIT_FAILURE tidak dibatasi oleh standar untuk menjadi satu, tetapi banyak sistem yang menerapkannya sebagai satu.

Sam DeHaan
sumber
9

exit(0)menunjukkan bahwa program dihentikan tanpa kesalahan. exit(1)menunjukkan bahwa ada kesalahan.

Anda dapat menggunakan nilai yang berbeda selain 1untuk membedakan berbagai jenis kesalahan.

sch
sumber
3

Perbedaannya adalah nilai yang dikembalikan ke lingkungan 0dalam kasus sebelumnya dan 1dalam kasus terakhir:

$ ./prog_with_exit_0
$ echo $?
0
$

dan

$ ./prog_with_exit_1
$ echo $?
1
$

Perhatikan juga bahwa nilai makro EXIT_SUCCESSdan EXIT_FAILUREdigunakan sebagai argumen untuk exitberfungsi adalah implementasi yang ditentukan tetapi biasanya diatur ke masing 0- masing dan angka bukan nol. (POSIX EXIT_SUCCESSharus 0). Jadi biasanya exit(0)berarti sukses dan exit(1)gagal.

Pemanggilan exitfungsi dengan argumen dalam mainfungsi setara dengan pernyataan returndengan argumen yang sama.

ouah
sumber
2

exit adalah panggilan sistem yang digunakan untuk menyelesaikan proses yang sedang berjalan dari pemanggilannya. Parameter untuk keluar digunakan untuk menginformasikan proses induk tentang status proses anak. Jadi, exit (0) dapat digunakan (dan sering digunakan) untuk menunjukkan keberhasilan eksekusi suatu proses dan exit (1) untuk menandai kesalahan. link referensi

mahtab
sumber
1

exit(0) berarti Program (Proses) berakhir secara normal dengan sukses ..

exit(1) berarti program (proses) berakhir secara normal tidak berhasil ..

Jika Anda ingin mengamati hal ini Anda harus tahu penanganan sinyal dan manajemen proses di Unix ...

tahu tentang sigaction, watipid()..untuk () ... seperti .... API ...........

Nikunj Patel
sumber
1

exit(0)berperilaku seperti return 0dalam main()fungsi, exit(1)berperilaku seperti return 1. Standarnya adalah, mainfungsi itu return 0, jika program berhasil berakhir sedangkan nilai bukan nol berarti program dihentikan dengan semacam kesalahan.

Tomáš Šíma
sumber
1

exit (0) sama dengan keluar (EXIT_SUCCESS).

exit (1) sama dengan keluar (EXIT_FAILURE).

Jika gagal, biasanya setiap nilai positif dikembalikan untuk keluar dari proses, yang dapat Anda temukan di shell dengan menggunakan $ ?.

Nilai lebih dari 128 yang disebabkan oleh pemutusan sinyal. Jadi jika ada perintah shell diakhiri oleh sinyal, status pengembalian harus (128 + nomor sinyal).

Sebagai contoh:

Jika ada perintah shell yang diakhiri oleh SIGINT, maka $? akan memberikan 130 (128 + 2) (Berikut 2 adalah nomor sinyal untuk SIGINT, periksa dengan menggunakan kill -l)

Sandeep_black
sumber
0

Ketika eksekusi berakhir (keluar), ia mengembalikan nilai ke shell yang menjalankannya. exit(0)biasanya menunjukkan bahwa semuanya baik-baik saja, sementara exit(1)menunjukkan bahwa ada sesuatu yang salah.

Ed Heal
sumber
0

exit () harus selalu dipanggil dengan nilai integer dan nilai bukan nol digunakan sebagai kode kesalahan.

Lihat juga: Penggunaan fungsi exit ()

Squig
sumber
0

exit function. Dalam Bahasa Pemrograman C, fungsi keluar memanggil semua fungsi yang terdaftar di keluar dan menghentikan program.

exit(1)berarti program (proses) berhenti tidak berhasil. Buffer file dibilas, aliran ditutup, dan file sementara dihapus

exit(0) berarti Program (Proses) berhasil dihentikan.

Rashid Thattayil
sumber