내가 (이상적으로 데이터 세그먼트 스택뿐만 아니라 힙) 메모리 한계 세트 프로세스를 실행하려면이 내 코드세트 메모리 제한
child = fork();
if (child == 0)
{
...
execv(program, args);
}
wait(&status);
과 같이 보입니다
이 구조를 구명해야한다, 나는 (실행 시간 등을 측정, 표준 입력/출력 리디렉션) 그것으로 몇 가지 물건을
내 질문 : 나는 프로그램 프로세스 메모리 제한을 설정하고 알고 부모를 할 수있는 방법, 초과했다면? 프로세스가 sigsegv로 죽지 않아야합니다. 알고 싶습니다.이 메모리 제한 때문에 프로세스가 종료되었습니다. 또는 완료되면이 프로세스의 메모리 사용량을 얻을 수있는 방법이 있습니까? 프로세스가 끝나면 최대 사용 메모리를 비교할 수 있습니다.
실행 시간을 늦출 수 없기 때문에 valgrind (또는 이와 비슷한)를 사용할 수 없습니다.
setrlimit는 한계를 적절하게 설정하지만 더 많은 메모리를 malloc (사용)하면 프로세스가 sigsegv를 호출하고 대기 상태가됩니다. 나는 이것들을 다르게하고 싶다. –
자식이 종료하고 기다렸다가'gotrusage()'와'RUSAGE_CHILDREN'을 사용하여 자식이 사용하는 리소스를 센다. – caf
getrusage는 좋은 기능이지만 "resident set size"는 도움이되지 않습니다. 나머지는 linux에서 사용되지 않습니다. –