는이 점 libpthread의 linuxthread 구현의 문제 (나는 그것이 버그가 확실하지 않다)을 보인다.
내가 간단한 프로그램 작성 :
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char **argv){
struct rlimit resource_limit;
if(getrlimit(RLIMIT_STACK, &resource_limit) != 0){
fprintf(stderr, "Failed to get rlimit: %s\n", strerror(errno));
return 1;
}
else{
fprintf(stderr, "In parent, RLIMIT_STACK, soft-%d, hard-%d\n",
resource_limit.rlim_cur, resource_limit.rlim_max);
}
int child_status = 0;
pid_t pid = fork();
switch(pid){
case 0://child
if(getrlimit(RLIMIT_STACK, &resource_limit) != 0){
fprintf(stderr, "Failed to get rlimit: %s\n", strerror(errno));
return 1;
}
else{
fprintf(stderr, "In child after fork, RLIMIT_STACK, soft-%d, hard-%d\n",
resource_limit.rlim_cur, resource_limit.rlim_max);
}
break;
case -1:
fprintf(stderr, "Fork error: %s\n", strerror(errno));
break;
default://parent
waitpid(pid, &child_status, 0);
break;
}
return 0;
}이 프로그램을 컴파일하고 -lpthread 옵션을 사용하지 않고 연결되어 있으면
를, 그것은 확인을 모든 곳에서 실행됩니다. 이 -lpthread 옵션과 연결되어 때, 유선 일이 일어날 :
In parent, RLIMIT_STACK, soft-10485760, hard--1
In child after fork, RLIMIT_STACK, soft--1, hard--1
을하지만 기계 위치에 실행하면 그것은 동적 점 libpthread의 linuxthread 버전에 연결된 컴퓨터에서 실행되는 경우가 있습니다 libpthread의 NPTL 버전에 동적으로 링크되어 있으므로 예상 결과를 얻을 수 있습니다.
In parent, RLIMIT_STACK, soft-10485760, hard--1
In child after fork, RLIMIT_STACK, soft-10485760, hard--1
어떤 버전 및 플랫폼입니까? 2.6.23 및 2.6.25에서 RLIMIT_STACK 동작이 변경되었습니다. –
2.6.9-52bs x86_64 SMP – Utoah
앱이 2.4.20-18.7smp i686 플랫폼에서 32 비트 버전으로 컴파일되었습니다. 그리고 위에 게시 된 플랫폼에서 실행되었습니다. 이 상황에서만 문제가 나타납니다. 실행하려는 64 비트 플랫폼에서 컴파일 된 경우이 문제없이 정상적으로 실행되며 컴파일 된 경우 32 비트 플랫폼에서 정상적으로 실행됩니다. – Utoah