2010-02-24 26 views

Trả lời

46

Bạn chắc chắn nên sử dụng _Exit(). exit() gọi các chức năng bạn đã thêm với atexit() và xóa các tệp được tạo bằng tmpfile(). Vì quá trình cha mẹ thực sự là một công cụ muốn thực hiện những điều này khi nó tồn tại, bạn nên gọi _Exit(), không thực hiện điều này.

Thông báo _Exit() với số vốn E. _exit(2) có lẽ không phải là những gì bạn muốn gọi trực tiếp. exit(3)_Exit(3) sẽ gọi cho bạn. Nếu bạn không có _Exit(3), thì có, _exit() là những gì bạn muốn.

+3

+1 Bạn muốn quá trình con không thành công thoát ra lặng lẽ như thể nó chưa bao giờ được tạo ra. –

+2

Cũng vì chuẩn C cũ cho phép trình liên kết giải quyết phân biệt chữ hoa chữ thường _Exit() không thể là hàm thư viện chuẩn vì nó sẽ xung đột với _exit() cũ hơn. Lấy làm tiếc. – Joshua

+7

Ngược lại. _Exit (3) là thư viện C chuẩn (ISO C99). _exit (2) là một cuộc gọi hệ thống POSIX.1 và không phải là một tiêu chuẩn C. –

3

execvp sẽ thoát khỏi trẻ nếu thành công để bạn không phải thoát.

Khi thực hiện lỗi, tôi chỉ cần sử dụng exit(EXIT_FAILURE); ở trẻ em.

Edit: tôi thấy rằng sau khi một số nghiên cứu: http://www.unixguide.net/unix/programming/1.1.3.shtml

Vì vậy, nó có vẻ như nó là tốt hơn để sử dụng _exit() trong một đứa trẻ ngã ba đặc biệt khi bạn đang ở trong C++: p Cám ơn câu hỏi của bạn tôi đã học được điều gì đó: D

+0

(exit được hệ thống độc lập hoạt động) Và khi nào bạn sử dụng _exit()? – helpermethod

1

Tùy thuộc vào hành vi bạn muốn: man -s 3 exitman _exit để biết thêm chi tiết về hệ thống của bạn. Nói chung tôi tin rằng _exit không chạy các hàm được đăng ký với atexit() trong khi exit (các hàm này tốt hơn không gọi exit - nếu không bạn sẽ nhận được đệ quy).

Nói chung tôi muốn thoát hơn _exit ngoại trừ trong các hàm được đăng ký với atexit, trong những hàm tôi sẽ gọi _exit, nếu cần.

15

Đứa trẻ của ngã ba() phải luôn gọi _exit().

Lệnh gọi thoát() thay vào đó là cách tốt để khiến bộ đệm stdio đang chờ được xả hai lần.

+1

exec không trả về ngoại trừ lỗi, trong đó bạn gọi _exit. – Joshua

0

exit() là chức năng ANSI-C và do đó, nó là hệ điều hành độc lập. Nó đóng tất cả các chức năng tiêu chuẩn ANSI-C. _exit() được gọi bởi exit() để đóng hoạt động chức năng hệ thống phụ thuộc, vì exit() không có ý tưởng về chúng.

+0

"_exit() là một hàm hạt nhân Linux" không chính xác, hãy xem http://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html –

+0

Bạn nói đúng về điều đó, nhưng phần còn lại của nhận xét của tôi là đúng . Xem: Hệ thống Unix Lập trình bởi David Curry, trang 291. – ImanKh

Các vấn đề liên quan