소개
프로그램(정확히 말하면 프로세스, 이하 프로세스)가 포크처럼 갈라진다고해서 fork란 이름이 붙었습니다.
원래있던 프로세스를 부모프로세스, 새로 생긴 프로세스를 자식프로세스라고 합니다.
멀티태스킹을 할수 있게하는 기본적인 시스템함수입니다.
이함수를 쓴 시점으로
부모프로세스(원래의 프로세스)와 똑같은(변수들 상수들 같은 모든 데이터가 동일) 자식프로세스가 생성됩니다.
#덧으로 두 프로세스는 비동기적으로 동시에 실행이 됩니다.
비동기란 말은 mp3, pda가 컴퓨터랑 비동기이면 서로 정보가 다르듯이
두 프로세스간에 모든 정보에서 따로따로 논다는 말입니다.
사용법
fork()함수를 썼을 때 거기서 나오는 반환값이 부모프로세스인지 자식프로세스인지 판단하게 해줍니다.
이것을 활용하면
ret = fork();
ret이 0이면 자식프로세스
0보다 크면 부모프로세스
-1이면 오류가 난 것입니다.
이것을 switch()로 깨끗하게 쓰면
할일을 모듈화해서 함수로 만들어주면 깔끔하겠죠!!
내가 해결한 궁금증들
fork()로 만든 프로세스와 쓰레드의 차이점이 뭔가요?
프로세스로 만들면 스택세그먼트(지역변수) 외에 힙 세그먼트(전역,malloc으로 잡은변수 저장), 데이터 세그먼트(전역변수, 상수), 텍스트 세그먼트(프로그램코드)가
모두 복사됩니다.
(정확히 말하자면 리눅스커널에서 효율성을 위해 copy_on_write방식으로서 쓰면(값이 변경되면) 복사됩니다. 그전까진 읽기 전용으로 부모프로세스와 공유합니다. 겉으로는, 그리고 이론상으로는 복사된 상태!! )
이에비해 쓰레드는 함수호출과 함께 스택세그먼트 영억이 하나 더 생기고 그외에 변화는 일어나지 않습니다.
프로그램(정확히 말하면 프로세스, 이하 프로세스)가 포크처럼 갈라진다고해서 fork란 이름이 붙었습니다.
원래있던 프로세스를 부모프로세스, 새로 생긴 프로세스를 자식프로세스라고 합니다.
멀티태스킹을 할수 있게하는 기본적인 시스템함수입니다.
이함수를 쓴 시점으로
부모프로세스(원래의 프로세스)와 똑같은(변수들 상수들 같은 모든 데이터가 동일) 자식프로세스가 생성됩니다.
#덧으로 두 프로세스는 비동기적으로 동시에 실행이 됩니다.
비동기란 말은 mp3, pda가 컴퓨터랑 비동기이면 서로 정보가 다르듯이
두 프로세스간에 모든 정보에서 따로따로 논다는 말입니다.
사용법
fork()함수를 썼을 때 거기서 나오는 반환값이 부모프로세스인지 자식프로세스인지 판단하게 해줍니다.
이것을 활용하면
ret = fork();
ret이 0이면 자식프로세스
0보다 크면 부모프로세스
-1이면 오류가 난 것입니다.
이것을 switch()로 깨끗하게 쓰면
ret = fork()
switch(ret)
{
case 0:
//자식프로세스의 할일
break;
case -1:
//오류
break;
default:
//보무프로세스의 할일
break;
}
switch(ret)
{
case 0:
//자식프로세스의 할일
break;
case -1:
//오류
break;
default:
//보무프로세스의 할일
break;
}
할일을 모듈화해서 함수로 만들어주면 깔끔하겠죠!!
내가 해결한 궁금증들
fork()로 만든 프로세스와 쓰레드의 차이점이 뭔가요?
프로세스로 만들면 스택세그먼트(지역변수) 외에 힙 세그먼트(전역,malloc으로 잡은변수 저장), 데이터 세그먼트(전역변수, 상수), 텍스트 세그먼트(프로그램코드)가
모두 복사됩니다.
(정확히 말하자면 리눅스커널에서 효율성을 위해 copy_on_write방식으로서 쓰면(값이 변경되면) 복사됩니다. 그전까진 읽기 전용으로 부모프로세스와 공유합니다. 겉으로는, 그리고 이론상으로는 복사된 상태!! )
이에비해 쓰레드는 함수호출과 함께 스택세그먼트 영억이 하나 더 생기고 그외에 변화는 일어나지 않습니다.

이올린에 북마크하기
이올린에 추천하기
Prev
Rss Feed