#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]){ int pid; int i; i = 1000; printf("start! \n"); pid = fork(); //오류 if (pid == -1) { perror("fork error"); exit(1); //자식 프로세스 }else if(pid == 0){ printf("자식 : 나의 pid 는 %d 입니다. \n" , getpid()); //표준입력,표준출력,표준에러를 닫는다. close(0); close(1); close(2); //setsid()를 이용해서, 사용자환경에서 독립된 자신의 환경을 만든다. //기존의 환경이 리셋되면서 터미널이 사라진다. //또한 새로운 터미널을 지정하지 않았기 때문에, 이 프로세스는 결과적으로 터미널을 가지지 않게 된다. setsid(); while (1) { printf("(자)--> %d\n" , i); i++; sleep(1); }//while - end }else{ printf("나를 복사한(자식) PID는 %d 입니다. \n" , pid); printf("나의 pid 는 %d 입니다. \n" , getpid()); sleep(1); printf("나죽네..ㅜㅜ"); //부모프로세스를 종료한다 exit(0); } exit(0); } /* 현재 화면과 프로세스에서 떨어져 나가서 독립적으로 실행되는 프로세스를 데몬 프로세스라고 한다. 가장 대표적인 프로그램이 웹서비스를 위한 웹서버 프로그램일 것이다. 이런 프로그램들은 거의 운영체제가 시작됨과 동시에 시작되어서 운영체제가 끝날때까지 뒤에서 우리가 눈치채지 못하는 상태에서실행이 된다. 데몬프로세스가 되려면 다음과 같은 조건을 갖추어야 한다. 1.일단 고아 프로세스가 되어야 한다. 데몬 프로세스는 완전히 독립된 프로세스다. 그러므로 고아 프로세스가 되어야 한다. 예컨데, 가족으로 부터 독립해서 사회로 나가야 된다는 얘기가 되겠다. 2.표준입력, 표준출력, 표준에러을 닫는다. 3.터미널을 가지지 않는다 */