2009-03-18 3 views
3
나는 자식 스레드로 실행되는 다음과 같은 코드 블록을 가지고있다. someVar == 1로 프로그램을 실행하면 _exit (0) 호출이 내 스레드를 죽인다는 것을 이해한다. 그러나 0으로 설정하면 execvp() 호출 후 프로그램이 계속 실행되지 않고 printf 문이 실행됩니까?

답변

7

exec* (exec 패밀리에서 exec 함수를 호출하면) 새 프로그램의 코드가 현재 프로세스에로드되고 실행은 주요 기능 및 내용으로 계속됩니다. 이러한 함수가 성공적으로 실행되면 printf이 메모리에 더 이상 존재하지 않기 때문에 절대 반환되지 않습니다.

exec*fork 기능을 혼동하는 것 같습니다. 부모와 동일한 코드를 실행할 새 하위 프로세스가 연결됩니다.

원하는 스레드가 주 스레드와 데이터와 주소 공간을 공유하는 경우 새 스레드를 만들려면 pthread_create 함수를 사용해야합니다. 새 프로세스는 데이터를 공유하지 않으므로 파이프 또는 공유 메모리와 같은 다른 메커니즘을 사용하여 다른 프로세스와 통신해야합니다.

2

execvp()은 새 실행 파일로 프로그램을 덮어 쓰며 오류가 발생하지 않는 한 반환하지 않습니다. 우선 fork()이 필요하고 자식 프로세스에서 exec *를 호출하십시오. 과정 당신 간부 '에드 실행 execvp이 바꾸기 때문에 과정 당신 했다

2

. execvp이 반환되면 실패했기 때문입니다. 그렇지 않으면 반환하지 않아야합니다.