
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid;
pid = fork();
printf("Hello, Process!\n");
}
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid;
pid = fork();
printf("Hello, Process! %d\n", pid);
}
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
int main(){
pid_t pid;
pid = fork();
if (pid > 0)
wait(NULL);
printf("Hello, Process! %d\n", pid);
}
ex1)
int value = 5;
int main(){
pid_t pid;
pid = fork();
if (pid == 0){
value += 15;
printf("value in child process is %d\n", value);
return 0;
}
else if(pid > 0){
wait(NULL);
printf("value in parent process is %d\n", value);
}
}
ex2)
int main(){
fork();
fork();
fork();
return 0;
}
ex3)
int main(){
int i;
for(i=0;i<4;i++)
fork();
return 0;
}
ex4)
int main(){
printf("L0\n");
fork();
printf("L1\n");
fork();
printf("Bye\n");
}
출력
L0
L1
L1
Bye
Bye
Bye
Bye
생성된 자식 프로세스와 부모 프로세스는 동시에 실행되고, 프로세스 생성 및 스케쥴링에 따라 출력 순서는 달라질 수 있음
ex5)
int val = 5;
int main(){
fork();
val += 5;
printf("val is %d\n", val);
fork();
val += 5;
printf("val is %d\n", val);
fork();
val += 5;
printf("val is %d\n", val);
return 0;
}
출력
10
10
15
15
15
15
20
20
20
20
20
20
20
20
ex6)
int main(){
pid_t pid;
pid = fork();
if (pid == 0){
execlp("/bin/ls", "ls", NULL);
printf("LINE J\n");
}
else if (pid > 0){
wait(NULL);
printf("Child Complete\n");
}
return 0;
}
출력
{ls} 내역
Child Complete
→ "LINE J"라는 텍스트가 출력되지 않음
ex7)
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
int main(){
pid_t pid, pid1;
pid = fork();
if (pid == 0){
printf("child process\n");
pid1 = getpid();
printf("child: pid = %d\n", pid);
printf("child: pid1 = %d\n", pid1);
puts("");
}
else if (pid > 0){
wait(NULL);
printf("parent process\n");
pid1 = getpid();
printf("parent: pid = %d\n", pid);
printf("parent pid1 = %d\n", pid1);
puts("");
}
return 0;
}
ex8)
#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#define SIZE 5
int nums[SIZE] = {0, 1, 2, 3, 4};
int main(){
pid_t pid;
int i;
pid = fork();
if (pid == 0){
for(i=0;i<SIZE;i++){
nums[i] *= i;
printf("CHILD: %d\n", nums[i]);
}
}
else if (pid > 0){
wait(NULL);
for(i=0;i<SIZE;i++)
printf("PARENT: %d\n", nums[i]);
}
}
복사된 자식 프로세스에서는 0, 1, 4, 9, 16를, 부모 프로세스에서는 0, 1, 2, 3, 4를 출력하게 된다