Tôi muốn chạy một quá trình với một bộ giới hạn bộ nhớ (lý tưởng phân đoạn dữ liệu, ngăn xếp và đống cũng) Mã của tôi trông giống nhưbộ giới hạn bộ nhớ của quá trình trong C (với ngã ba và exec)
child = fork();
if (child == 0)
{
...
execv(program, args);
}
wait(&status);
và cấu trúc này nên được bảo quản, tôi làm một số công cụ với nó (chuyển hướng stdin/out, đo thời gian thực hiện vv)
Câu hỏi của tôi: Làm cách nào để đặt giới hạn bộ nhớ cho một chương trình và cho cha mẹ biết, nếu nó bị vượt quá? Quá trình này không nên bị giết với sigsegv, tôi muốn biết, quá trình này đã bị giết chỉ vì giới hạn bộ nhớ này. Hoặc tốt hơn, có cách nào để sử dụng bộ nhớ của quá trình này khi hoàn tất không? Sau khi quá trình kết thúc, tôi có thể so sánh bộ nhớ được sử dụng tối đa.
Tôi không thể sử dụng valgrind (hoặc một cái gì đó tương tự), bởi vì tôi không thể làm chậm thời gian thực hiện.
setrlimit đặt giới hạn đúng cách, nhưng khi tôi malloc bộ nhớ nhiều hơn (và sử dụng nó), quá trình gọi sigsegv và đó là những gì tôi nhận được trong trạng thái chờ đợi. Tôi muốn khác biệt. –
Sau khi trẻ đã thoát và chờ đợi, bạn có thể sử dụng 'getrusage()' với 'RUSAGE_CHILDREN' để đếm các tài nguyên được sử dụng bởi đứa trẻ. – caf
getrusage là chức năng tốt, nhưng "kích thước thiết lập thường trú" sẽ không giúp tôi (nó sẽ?) Phần còn lại không được sử dụng trong Linux. –