int main() // parent
{
int pid;
// 이 부분에서 자식 Process 생성 후 쭉 진행
pid = fork();
if (pid == 0)
printf("\n Hello, I am child\n");
else if (pid > 0)
printf("\n Hello, I am parent\n");
}
int main() // child : 위에서 fork할 때 생성
{
int pid;
// 복사 (fork) 당시 프로그램 카운터가 가리키던 지점.
// 프로그램 카운터까지 복사한다.
// 따라서 맨 위부터가 아니라 이 부분부터 이어서 시행한다.
pid = fork();
if (pid == 0)
printf("\n Hello, I am child\n");
else if (pid > 0)
printf("\n Hello, I am parent\n");
}
int main() // child : 위에서 fork할 때 생성
{
int pid;
pid = fork();
if (pid == 0)
{
printf("\n Hello, I am child\n");
// exec 시 새로운 프로세스로 덮어 씌움
// 한번 exec 하면 되돌리기가 불가능
execlp("/bon/date", "/bin/date", (char *) 0);
}
else if (pid > 0)
printf("\n Hello, I am child\n");
}
int main() // child : 위에서 fork할 때 생성
{
int childPID;
s1;
childPID = fork();
if (childPID == 0)
{
...
}
// 부모면 sleep, 자식의 종료를 기다림.
else if (pid > 0)
{
wait();
}
s2;
}
int main() // child : 위에서 fork할 때 생성
{
int pid;
// 여기서 끝나버림
// 자발적 종료 시 사용
exit();
childPID = fork();
if (childPID == 0)
{
...
}
else if (pid > 0)
{
...
}
}
프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로는 다른 프로세스의 수행에 영향을 미치지 못함.
프로세스 협력 메커니즘으로 하나의 프로세스가 다른 프로세스 수행에 영향을 미칠 수 있음.
협력 메커니즘(IPC InterProcess Communication)
- 메시지를 전달하는 방법
Message Passing : Kernel을 매개로 메세지 전달
- 통신하려는 프로세스 이름을 명시적 표시하면 direct
Kernel을 매개로 msg 전달함- mailbox(port)로 메세지 간접 전달하면 indirect
- 주소 공간을 공유하는 방법
Shared Memory : 서로 다른 프로세스 간 주소공간 일부 공유
- 주소 공간 공유한다고 Kernel에게 알려줘야 함
마찬가지로 Thread 들도 주소공간을 공유하니까 협력 가능 (애초에 하나의 Process이기는 하지만...)