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