2010-01-25 29 views
5

Tôi gặp sự cố khi thực thi tập lệnh bash từ C++ bằng lệnh gọi hệ thống. Tập lệnh bắt tín hiệu SIGPIPE và thoát với mã trả lại 141.Bạn có nên bẫy SIGPIPE trong tập lệnh bash không?

Sự cố này đã bắt đầu xuất hiện chỉ trong bản phát hành cuối cùng của mã của tôi.

Câu hỏi của tôi là như sau:

  1. Tại sao SIGPIPE này xảy ra ngay bây giờ và đã không xảy ra trước đây?
  2. Có an toàn để bỏ qua SIGPIPE và hậu quả là gì?
+0

Bạn có thể đăng một số đoạn mã có liên quan không? – tur1ng

+0

Như được giải thích trong câu trả lời, có một đường ống bị hỏng ở đâu đó và do đó tín hiệu 'SIPIPE'. Nó có nghĩa là một cái gì đó sai trong logic ur sử dụng. Bạn không nên bỏ qua nó. –

Trả lời

3

1) Rất khó để trả lời mà không biết chính xác những gì bạn đã thay đổi.
2) Nếu một chuỗi các lệnh xuất hiện trong một đường ống, và một trong các lệnh đọc kết thúc trước khi người viết hoàn thành, người viết sẽ nhận được tín hiệu SIGPIPE. Vì vậy, cho dù bạn có thể bỏ qua nó phụ thuộc vào việc đó là hành vi chấp nhận được cho kịch bản của bạn. Thông tin thêm here

2

Một current version of the FAQ rằng PiedPiper liên quan đến trạng thái:

Tính đến bash-3.1, bash không báo cáo lỗi SIGPIPE theo mặc định. Bạn có thể tạo phiên bản bash sẽ báo cáo lỗi đó.

Có thể bạn đã thay đổi phiên bản Bash hoặc cách nó được tạo và gây ra thay đổi về hành vi trong mã của bạn không?

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