#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
printf("Hello, Process! %d\n", pid); // 1 1005
}
pid 100 이 fork 해서 생긴 pid101(childprocess)이 fork 하면 0이 나옴
parent process의 address space 복제
wait()시 child run 동안에 child를 기다리며 child의 termination을 기다림
#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);
}
- ParentP0가 P1 만든 후, wait 중
- P1가 0이니까 0 출력,
그다음에 P0의 pid 출력
int value = 5;
int main() {
pid_t pid;
pid = fork();
if (pid==0) {
value += 15;
return 0;
} else if (pid > 0) {
wait(NULL);
printf("Parent: value = %d\n", value);
}
}
Parent가 Child Process를 fork함 (복사됨 - value = 5)
Parent process는 기다림
childprocess는 pid = 0이기 때문에 자신의 value = 5에 15를 더해서 20이 되고 끝남
하지만, Parent Process의 value은 여전히 5
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;
}
P0는 P1를 복사함
P1 == 0이므로, execlp 영역에 도달함.
execlp는 실행중인 것을 바꿈 -> LINE J는 실행되지 않음
int main() {
pid_t pid = fork();
if (pid == 0) {
pid1 = getpid();
printf("child: pid = %d\n", pid); // A
printf("child: pid1 = %d\n", pid1); // B
}
else if(pid > 0){
wait(NULL);
pid1 = getpid();
printf("parent: pid = %d\n", pid); //C
printf("parent: pid1 = %d\n", pid1); //D
}
}
child: pid = 0
child: pid1 = 5157
parent: pid = 5157
parent: pid1 = 5159
[운영체제] Lock을 이용한 동시성 제어 (0) | 2024.10.15 |
---|---|
[운영체제] 8. 스레드 (0) | 2021.03.23 |
[운영체제] 2. Process (0) | 2021.03.17 |
댓글 영역