리눅스 환경 C프로그래밍 fork()와 exec()함수에 대한 질문좀할게요
도움
질문 제목 : fork() 와 exce()에 대한 질문입니다.fork()와 exec()에 대한 질문질문 내용 :
리눅스환경에서 쉘프로그래밍을 구현하는 과제를 하는 중에 이해가 안가는 부분이 생겼습니다.
bool run( char* line )
{
pid_t=child;
child = fork();
if( child == 0 )
{
execvp( tokens[0], tokens );
printf( no such file\n );
_exit( 0 );
}
else if( child 0 )
{
printf( failed to fork()! );
_exit( 0 );
}
else
wait( &status );return true;}올린 부분은 run()함수의 일부분입니다.일단 제가 이해가 안되는 부분은 fork() 함수 호출 이후 부분인데요fork()함수를 호출하면 자식 프로세스가 생기잖아요?그럼 이제 부모프로세스와 자식프로세스 2개의 프로세스가 각각if(child==0) 요부분은 자식프로세스가 실행하는 코드부분이고else 요부분이 부모프로세스에서 실행되는 부분이므로 부모프로세스가 자식프로세스를 기다리잖아요?근데 저 자식 프로세스에서실행하는 코드부인execvp()가 현재 실행되고 있는 프로세스 를 덮어버리고 안에 매개변수로 받은값의 명령어를 실행하는 부분이라는 것은 알고있습니다. 그런데제가 임의로윗부분에printf(e); 라는아무런 값이나 출력하는 코드를 넣어봤는데 프로그램 구동중에 안보이더라구요 만약에 새로운 프로세스로 덮어 씌워버려도 printf(e);라는 명령이execvp()보다 위에있으니 먼저 실행되서 화면에 보여져야 된다고 생각했는데 그게 아니더라구요그래서 제 생각에는if(child==0)부분, 즉 자식프로세스가 실행하고 있는 부분은 화면에 안나온다고 생각했는데저 execvp() 함수를 지우고 프로그램을 구동하니printf(e);와printf( no such file\n ); 요두개의 명령이 모두 프로그램구동중에 화면에 출력되더라구요.. 제가 이해하기로는 자식프로세스가 실행하고 있는 부분은 화면에 안나온다고 생각했는데execvp()를 지우고 나니깐 저 자식프로세스 부분이 출력되서 의아해서 질문드립니다.제가 개념을 잘못이해하고있는건지 너무 헷갈리네요 ㅠ 설명 좀 부탁드립니다.