Và làm cách nào để tìm hiểu xem có bất kỳ lỗi nào trong số đó xảy ra hay không và dẫn đến lỗi được trả về bởi fork() hoặc system()? Nói cách khác, nếu fork() hoặc system() trả về lỗi, một số thứ trong Linux mà tôi có thể kiểm tra để chẩn đoán tại sao lỗi cụ thể đó lại xảy ra là gì?Một số điều kiện nào có thể khiến các cuộc gọi fork() hoặc system() thất bại trên Linux?
Ví dụ:
- Chỉ cần đơn giản ra khỏi bộ nhớ (kết quả trong errno ENOMEM) - kiểm tra sử dụng bộ nhớ với 'miễn phí' vv
- nhớ Không đủ cho kernel để sao chép bảng trang và thông tin kế toán khác của quá trình cha mẹ (kết quả trong errno EAGAIN)
- Có giới hạn quy trình toàn cầu không? (kết quả trong errno EAGAIN cũng?)
- Có giới hạn quy trình cho mỗi người dùng không? Làm thế nào tôi có thể tìm ra nó là gì?
- ...?
Để làm rõ, khi người ta biết rằng một lỗi như EAGAIN đã xảy ra trong fork() (errno == EAGAIN), làm thế nào để bạn tìm ra nguyên nhân gây ra nó (RLIMIT_NPROC?) trang bảng, hoặc cấu trúc nhiệm vụ, và nếu như vậy tại sao?Và làm thế nào để bạn tránh nó?) –
Tôi cũng đã hỏi một câu hỏi khác, nhưng liên quan đến các bảng trang trong Linux: http://stackoverflow.com/questions/853736/how-to-find-or-calculate-a-linux- processs-page-table-size-và-other-kernel-accou –