Tôi nghĩ rằng tôi có thể đã làm điều này sai trong một thời gian, bởi vì chúng tôi chỉ chuyển sang systemd và nó xem xét quá trình giết chết của tôi đã kết thúc không thành công.Mã thoát của chương trình của tôi là gì nếu tôi nhận được tín hiệu?
Về cơ bản tôi lắng nghe SIGHUP
, SIGINT
và SIGTERM
và sau đó (bằng cách chuyển mã tín hiệu trở lại lên main
) sạch sẽ, ví dụ: return 128+SIGHUP
.
tôi mong đợi này sẽ được sử dụng để cư $?
, nhưng bây giờ tôi nghĩ tôi hiểu rằng vỏ có trách nhiệm đưa ra $?
một giá trị như vậy, và sau đó chỉ nếu tín hiệu là unhandled. Vì vậy, ngay cả khi quá trình thoát cuối cùng do tín hiệu, vì tín hiệu đã được xử lý, $?
sẽ kết thúc là 0
và tất cả bằng chứng cho thấy tín hiệu có liên quan đến việc thoát sẽ bị mất. Có đúng không?
Khi xử lý SIGHUP
và thoát ra sạch, tôi có nên return EXIT_SUCCESS
từ main
?
Tôi đoán nó phụ thuộc. Nếu chấm dứt bằng tín hiệu được coi là chạy thành công nhị phân thì có. Nếu những tín hiệu đó biểu thị lỗi thì EXIT_FAILURE. – Hayt
@Hayt: Vì vậy, takeaway là tôi không nên làm _anything_ để kết hợp các mã tín hiệu vào quá trình xuất cảnh mã một trong hai cách? –
Đang bị chấm dứt hoặc treo lên một dấu hiệu cho thấy chương trình của bạn đã thất bại trong nhiệm vụ của mình? – StoryTeller