반응형
Fork()는 부모 프로세스와 동일한 자식프로세스를 생성한다.
아래의 코드로 이해를 도와보자.
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid, pid1; /* pid 변수 생성 */
printf("현재 내 pid : %d , ppid : %d\n",getpid(),getppid());
pid = fork(); /* fork 로 자식 프로세스 생성 */
printf("fork 실행 결과값 : %d\n",pid); /* fork 실행시, 반환되는 pid 값 보기 */
if (pid < 0) { /* 에러 발생시 */
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0) { /* fork 실행시, 반환값으로 pid가 0이랑 같게 나올 경우, 자식 프로세스 */
pid1 = getpid(); /* getpid()함수로 현재본인 pid 값을 pid1 에 저장 */
printf("자식 프로세스 : pid = %d\n",pid); /* A 가 의미하는 것은 fork() 반환 값 pid ==0 => 현재 여기는 자식 프로세스 다. */
printf("자식 프로세스 : pid1 = %d\n",pid1); /* B 가 의미하는 것은 자식 프로세스의 PID 값 */
printf("자식의 부모 프로세스 : ppid = %d\n",getppid()); /* 이 행이 의미하는 것은 자식 프로세스의 부모 프로세스 PID 값 */
pause();
}
else { /* fork 실행시, 반환값으로 pid 가 0 보다 크게 나올 경우 = 부모 프로세스 */
pid1 = getpid(); /* getpid()함수로 현재본인 pid 값을 pid1에 저장 */
printf("부모 프로세스: pid = %d\n",pid); /* C가 의미하는 것은 fork() 반환값 pid >0 => 현재 여기는 부모 프로세스이며, PID는값은 자식 프로세스 getpid() 와 동일 출력*/
printf("부모 프로세스: pid1 = %d\n",pid1); /* D 부모 프로세스자기 자신의 pid값 출력*/
printf("부모의 부모 프로세스: ppid = %d\n",getppid()); /* 이 행이 의미하는 것은 부모의 부모 프로세스 PID값 */
wait(NULL);
pause();
}
return 0;
}
view {파일명}.c 로 위의 내용을 입력후,
gcc {파일명}.c 로 컴파일 한다.
컴파일을 성공하면, a.out 파일이 생성된다.
./a.out 과 같이 실행을 해보자.
실행 결과는 아래와 같다.
반응형
'IT 인터넷 > 리눅스' 카테고리의 다른 글
웹 서버 만들기(Apache-PHP-Mysql) (3. Mysql 설치 -RPM(YUM)) (0) | 2021.12.14 |
---|---|
웹 서버 만들기(Apache-PHP-Mysql) (2-1. PHP 설치 -컴파일) (0) | 2021.12.14 |
웹 서버 만들기(Apache-PHP-Mysql) (2. PHP 설치 -RPM(YUM)) (0) | 2021.12.14 |
웹 서버 만들기(Apache-PHP-Mysql) (1-1. 아파치 설치 - 컴파일) (0) | 2021.12.14 |
웹 서버 만들기(Apache-PHP-Mysql) (1. 아파치 설치 - RPM(YUM)) (0) | 2021.12.14 |