저는 스레드, 프로세스, execv 등에 매우 익숙합니다. 저는 조사한 결과, execv를 실행할 때 호출 프로세스의 공간이 필요하다는 것을 알았습니다. main에서 쓰레드를 생성 한 다음 execv를 쓰레드 (쓰레드가 생성되기 직전이 아니라 쓰레드가 생성 된 직후)를 호출 할 때 어떻게되는지 궁금하다. 나는 execv가 main을 대체 할 것이지만 이것이 스레드를 대체 할 것이거나 스레드가 정상적으로 실행되고 완료 될 수 있다는 것을 의미 하는가?스레드를 만든 후 execv를 호출하십시오.
의작은 예를 들어 내가 부탁 해요 :
int main(){
printf("hello from main!);
char *buffer = "some data";
if(pthread_creat(&mythreadpid, NULL, thread1, buffer){
printf("ERROR!!");
}
execv(...) //do execv here
}
void *thread1(void *buffer){
printf("calling from my thread!");
//do something else
}
나는이 테스트 한 내 thread와 경험 이상한 행동 내가이 그것을
에 대한 이유가 있는지 알고 싶어 너무 완료되지 것 않았다
'execv'는 단 하나의 스레드가 아니라 전체 프로세스를 대체합니다. – Barmar
그래서 메인과 메인에서 생성 된 스레드를 대체할까요? – unconditionalcoder
예, 환경 및 열린 파일 설명자를 제외하고 현재 프로세스의 모든 메모리와 상태가 exec에 의해 덮어 쓰여집니다. – Barmar