2010-03-03 36 views
6

Tôi đang xây dựng phần mềm lập trình cuộc thi. Chương trình của người dùng được nhận bởi hệ thống đánh giá của chúng tôi và được đánh giá bằng cách biên dịch nó và chạy nó thông qua một fork() và exec(). Quá trình cha mẹ chờ đợi cho đứa trẻ (quá trình gửi) để thoát ra, và sau đó làm sạch nó lên.Thống kê quá trình đo lường trong Linux

Để cung cấp thông tin hữu ích về chương trình chạy, tôi muốn đo thời gian CPU và bộ nhớ đỉnh được chương trình sử dụng. Hạt nhân Linux có theo dõi các giá trị này không? Có cách nào khác để lấy thông tin này không?

+2

Hãy cẩn thận làm điều này, một người dùng giả mạo có thể gây bất ngờ khó chịu trong chương trình của họ. –

+0

Chúng tôi hạn chế thời gian CPU tối đa, mở tệp, v.v., sử dụng syscall setrlimit, vì vậy tôi không nghĩ người dùng có thể gặp bất kỳ sự ngạc nhiên khó chịu nào :) – donatello

Trả lời

6

Nếu bạn gọi cuộc gọi wait4() hệ thống để gặt hái những đứa trẻ khi nó kết thúc, nó sẽ điền vào một cấu trúc struct rusage với việc sử dụng tài nguyên của đứa trẻ (ru_utimeru_stime giữ thời gian CPU của người dùng và hệ thống được trẻ sử dụng tương ứng).

0

Giải pháp công nghệ thấp (nhưng dễ) là kết xuất đầu ra top theo chế độ hàng loạt theo định kỳ và phân tích cú pháp sau đó.

-1

Bạn có thể kiểm tra lệnh trên cùng. Đó có thể là một số trợ giúp.

+0

Sẽ tốt hơn nếu giải thích được giải thích? Tôi biết rằng mọi người đã đăng câu trả lời tốt hơn cho câu hỏi này, nhưng, tôi không nghĩ câu trả lời này hoàn toàn không liên quan hoặc sai. Hãy sửa tôi nếu tôi sai. – Jay

+0

có vẻ như giải pháp được tự động hóa. trên cùng là chương trình người dùng cuối, không thích hợp cho tự động hóa. –

0

Thời gian (1) chương trình có thể giúp tôi đoán. Nó đơn giản hơn nhiều so với bình chọn hàng đầu.

Một đoạn trích từ trang người đàn ông:

Disregarding the 
    name of the utility, GNU makes it output lots of useful information, 
    not only about time used, but also on other resources like memory, I/O 
    and IPC calls (where available). 
Các vấn đề liên quan