inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 시스템 프로그래밍 - 이론과 실습

쓰레드 개념, 쓰레드 생성/종료/조인/동기화

자식 스레드에서의 exec 실행에 대한 질문입니다.

486

젓인

작성한 질문수 158

1

fork 후 자식 프로세스에서 exec를 실행하면 완전히 프로세스가 구분되어져서 , pid == 0 ㅇ안에서 exec 뒤에 있는 소스는 실행이 전혀 되지 않았습니다

그런데 스레드에서는 조금은 다르게 같은 스레드 그룹이라서 

"after exec"가 실행될줄 알았는데 실제론 그렇지 않네요...

 

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

void *child_thread_main(void *arg)
{
    printf("Before exec\n");
    execl("/bin/ls", "-al", NULL);
    printf("After exec\n");

    return NULL;
}

int main(int argc, char **argv) 
{    
    int ret;
    pthread_t child_thread;
    
    ret = pthread_create(&child_thread, NULL, child_thread_main, NULL);
    if(ret) {
        printf("pthread_create(%d)\n", ret);
        return -1;
    }
    
    ret = pthread_join(child_thread, NULL);
    if(ret) {
        printf("pthread_join(%d), str_err:%s\n", 
                ret, strerror(ret));
        return -1;
    }

    printf("Done..\n");
    return 0;
}

linux

답변 3

1

런잇(ProgCoach4U)

흥미로운 실험이네요!! 하지만 기대했던 대로 결과가 나오진 않으셨나보네요 :-( 그래도 새로운 시도.. 아주 좋습니다!

exec() 계열의 API는 기본적으로 새로운 프로그램을 로딩하고, 새로운 프로그램 이미지를 실행하게 됩니다. 따라서 동작중인 프로세스가 single-thread/multi-thread 여부에 관계 없이 모두 종료되고 새로운 프로그램을 실행하게 됩니다. 이 때 pthread_join()에서 기다리고 있을 main thread도 같이 종료됩니다. 그래서 "after exec"은 출력되지 않고, ls가 실행되고나서 프로그램이 완전히 종료됩니다. 

동작 중이던 프로세스를 그대로 둔 채로 외부 프로그램을 띄웠다가 외부 프로그램이 종료되고나서 원래 프로세스가 동작을 이어나가기 위해서는 fork() & exec()이 필요합니다. fork()와 exec()가 항상 붙어다니는 이유죠 :)

0

젓인

와.. 개념이 바로 잡혔습니다 이제!!

0

젓인

execl 함수는 새로운 실행함수이기 때문에, 프로세스 생성은 불가피하기 때문에 fork에서와의 차이가 없는건가요?

inotify 객체에 등록된 watch descriptor 해제 관련 질문

0

37

2

select API 실습 코드 질문

0

41

2

wsl에서 fcntl사용

0

73

2

inotify_event 구조체 질문 [파일 이벤트 - 라이브 프로그래밍]에서...

0

180

2

./stat 파일이름

0

273

2

fopen r, r+모드 차이

0

460

2

강의를 모두 수강하고 스스로 구현하면 좋을 과제나 프로젝트 주제가 있을까요?

0

326

1

pthread 질문

0

419

2

I/O Multiplexing(select) 질문

0

325

1

inotify.c. ret 질문

0

302

1

inotify.c 질의합니다.

1

317

1

child process

0

715

1

read/blocking

0

565

1

flock

0

565

1

system call

0

598

1

pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?

0

487

1

fork() 함수 사용시 결과 관련 질문

0

371

1

exec 관련 궁금한 사항

0

450

2

파일 디스크립터와 FILE 구조체에 대한 질문

0

552

1

buf 선언에 따른 read() fail 문제

0

251

2

파일 이벤트 - 라이브 프로그래밍 에서 캐스팅 질문

0

254

1

2번 multi thread 방법 질문

0

242

1

segmentation fault 발생 관련 문의

1

842

1

라이브 코딩 실습 코드

0

235

1