프로세스가 무엇이고 스레드가 무엇이며 리눅스의 스레드가 프로세스인지 아닌지 구분하는 게 의미가 있을 수도 있겠지요. 하지만 어차피 인공적인 개념일 뿐이고 필요에 따라 바꿀 수 있는 것들인데, 저는 제가 필요한 상황에서 리눅스의 스레드들이 어떻게 동작하는지만 이해할 수 있다면 정확한 정의나 구분 같은 것에는 아주 자세하게 따지고 싶지는 않습니다. 학부 운영체제 시험 준비 중인 게 아니라면요.
스레드 생성 후 스레드에서 exec를 하고 종료를 하면 메인 스레드 까지 종료되는 것이 아니라 생성한 스레드만 종료되서 질문을 했습니다.
exec는 프로세스를 대체 한다는 뜻인데 실제로 사용하면 프로세스 대체가 아닌 함수를 실행한 스레드를 대체하는 것으로 보여 Process = Thread 라고 생각했습니다.
* All threads other than the calling thread are destroyed during an execve(). Mutexes, condition variables, and other pthreads objects are not preserved.
이번주 주제는 스레드인가요?
간만에 Q&A 게시판에 왔는데, 스레드 주제로 질문이 많아서 놀랐습니다.
스레드에서 fork 를 하고, exec 으로 뭘 넘겨주셨는지는 모르겠습니다만...
Thread 와 Process 는 엄연히 다르지요. :)
제일 큰 차이점은 데이터 교환방식, 즉, 통신방식이 틀립니다. 프로세스간 데이터를 전달할 때에는 IPC 를 쓰고, I/O 스택들을 사용하니 느립니다.
Thread 간에는 공유 메모리 영역이나 Mutex 를 지정해서 통신하며, 메모리를 통해 데이터를 전달하므로 빠릅니다.
다른 질문의 내용을 보시면 PID와 TID가 별도로 존재하는 것을 아실 수 있으실 겁니다. 즉, 스레드가 100개 있어도 PID 는 하나입니다.
..
답변 감사합니다.
"틀리지요" 라고 하면 아니되지요. "다르지요" 라고
"틀리지요" 라고 하면 아니되지요. "다르지요" 라고 해야죠.
언제나 친절한 답변을 해주시는 jachin 님께 괜히 트집잡아봅니다 :p
세벌 https://sebuls.blogspot.kr/
아하, 고쳤습니다. ㅎㅎㅎ
세벌님도 자유게시판에 번역 질문 올리실 때, 잘 올리셨어야죠~ :P
어서 질문하는 방법 읽고 오세요.
Quote: When fork(2) is called
http://man7.org/linux/man-pages/man3/pthread_atfork.3.html
http://man7.org/linux/man-pages/man2/clone.2.html
프로세스가 무엇이고 스레드가 무엇이며 리눅스의 스레드가 프로세스인지 아닌지 구분하는 게 의미가 있을 수도 있겠지요. 하지만 어차피 인공적인 개념일 뿐이고 필요에 따라 바꿀 수 있는 것들인데, 저는 제가 필요한 상황에서 리눅스의 스레드들이 어떻게 동작하는지만 이해할 수 있다면 정확한 정의나 구분 같은 것에는 아주 자세하게 따지고 싶지는 않습니다. 학부 운영체제 시험 준비 중인 게 아니라면요.
..
답변 감사합니다.
저도 스레드들이 어떻게 동작하는지만 이해하고 프로그램을 만들었는데
포플에서 명확한 단어?, 흐름? 을 적어야 해서 혼란이 오기 시작했습니다...ㅜ
..
스레드 생성 후 스레드에서 exec를 하고 종료를 하면 메인 스레드 까지 종료되는 것이 아니라 생성한 스레드만 종료되서 질문을 했습니다.
exec는 프로세스를 대체 한다는 뜻인데 실제로 사용하면 프로세스 대체가 아닌 함수를 실행한 스레드를 대체하는 것으로 보여 Process = Thread 라고 생각했습니다.
그거 확실한가요?
그거 확실한가요?
http://man7.org/linux/man-pages/man2/execve.2.html
직접 실험해 보신 것 같아서 조금 조심스럽습니다만 한번 더 확인해 보시는 건 어떨까요?
앗. 죄송합니다.
제가 틀렸군요... 죄송합니다.
별도의 스레드에서 fork 후 자식 구간에서 exec함수를 호출할 때입니다.
exec 함수는 프로세스를 대체한다는 것인데
왜 별도의 스레드에서 fork 후 자식 프로세스? 에서 exec를 호출하고 종료해도 메인 스레드가 죽지않아
Process = Thread 라고 생각했습니다.
댓글 달기