감사합니다. 그런데 응답자 중 누구도 정답을 제시하지 못했습니다. 모든 정보를 제공하지 않은 것은 제 잘못입니다. 사실 코드 자체에는 문제가 없지만, 앞에 메모리 사용량을 제한하는 setrlimit 부분이 있는데, 설정 오류로 인해 메모리 상한이 너무 작아서 argv의 문자열은 저장할 수도 없습니다. 오류가 터무니없네요. 오류가 터무니없네요. 오류가 터무니없네요. 그러나 적어도 우리는 argv가 현재 프로세스의 메모리를 차지하지 않는다는 것을 알고 있습니다. :P
보시다시피 현재 환경 변수가 여기에 출력됩니다. config->args가 NULL으로 끝나지 않고 환경 변수가 많으면 이런 일이 발생하나요?
코드를 자세히 읽지는 않았고 execvp 호출 부분만 간단히 살펴봤습니다. execvp 성공 여부를 판단하지 않고 raise 함수를 직접 호출하셨습니다. 그러나raise 이 함수는 실행 중인 프로그램에 신호를 보내는 데 사용됩니다. 즉, 여기서 execvp를 호출하기만 하면 SIGUSR1 신호가 아무 사고 없이 전송됩니다. errno은 전역 변수이므로 여기서는 execvp에 의해 설정된다는 의미는 아닙니다.
감사합니다.
그런데 응답자 중 누구도 정답을 제시하지 못했습니다. 모든 정보를 제공하지 않은 것은 제 잘못입니다.
사실 코드 자체에는 문제가 없지만, 앞에 메모리 사용량을 제한하는
setrlimit
부분이 있는데, 설정 오류로 인해 메모리 상한이 너무 작아서argv
의 문자열은 저장할 수도 없습니다.오류가 터무니없네요.
오류가 터무니없네요.
오류가 터무니없네요.
그러나 적어도 우리는
argv
가 현재 프로세스의 메모리를 차지하지 않는다는 것을 알고 있습니다. :P아래 코드를 보세요
으아아아컴파일하고 실행한 결과는 다음과 같습니다
으아아아
로 끝나지 않도록 코드를 수정하세요. 으아아아execvp
의 매개변수가NULL
컴파일 및 실행
으아아아보시다시피 현재 환경 변수가 여기에 출력됩니다.
config->args가
NULL
으로 끝나지 않고 환경 변수가 많으면 이런 일이 발생하나요?코드를 자세히 읽지는 않았고execvp
호출 부분만 간단히 살펴봤습니다.execvp
성공 여부를 판단하지 않고raise
함수를 직접 호출하셨습니다.그러나raise
이 함수는 실행 중인 프로그램에 신호를 보내는 데 사용됩니다. 즉, 여기서execvp
를 호출하기만 하면SIGUSR1
신호가 아무 사고 없이 전송됩니다.errno
은 전역 변수이므로 여기서는execvp
에 의해 설정된다는 의미는 아닙니다.ab를 백그라운드에 넣어두고 계속 오류가 난다면 ab실행 오류일 겁니다
config->args
포인터 배열의 마지막 요소가NULL
으로 설정되지 않은 것 같습니다.execvp
은 널 포인터를 기준으로 목록의 끝을 결정합니다.예:
으아아아