상세 컨텐츠

본문 제목

[운영체제] 프로세스 생성

CS구멍/운영체제🐣

by :Eundms 2024. 11. 5. 10:55

본문

#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이 나옴 


fork()

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

728x90

'CS구멍 > 운영체제🐣' 카테고리의 다른 글

[운영체제] Lock을 이용한 동시성 제어  (0) 2024.10.15
[운영체제] 8. 스레드  (0) 2021.03.23
[운영체제] 2. Process  (0) 2021.03.17

관련글 더보기

댓글 영역