디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

이 코드 왜 순서대로 실행이 안되지???

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 50 추천 0 댓글 1

#include <unistd.h>
#include <signal.h>
#include <sys/times.h>
#include <stdio.h>
#include <time.h>

long int i1=0,i2=0,i3=0,gaptime=0;
long int time1=0,time2=0,time3=0;
long int tick;
int num = 0;
int num1 = 0;

static void sig_int(int signo)
{
 printf("child caughtn");
 
 num1++;
 printf("num1 = %dn",num1);   
 
}

int main(void)
{
 int statlot;
 pid_t pid,pid1;
 struct tms buf;
 tick = sysconf(_SC_CLK_TCK);//nano second can be acquired
 
 printf("time = %ldn",times(&buf)/tick);
 

 struct sigaction sig;
 sig.sa_handler = sig_int;
 sigemptyset(&sig.sa_mask);
 sig.sa_flags = 0;
 sigaction(SIGINT,&sig,NULL);
 
 
 pid1 = getpid();

 

 i1 = times(&buf)/tick;
 if((pid = vfork()) < 0)//for sharing variable between parent and child
  printf("fork error 1n");

 if((pid1 = fork()) < 0)
  printf("fork errorn");
 else if(pid1 == 0)
 {
  sleep(5);
  printf("before killn");
  kill(pid,SIGINT);
  printf("after killn");
  _exit(0);
 }
 else
  _exit(0);//여기까지 읽으면 되


 


 

 








 

 printf("after pid1 processn");
  if(pid == 0)//pid is return value, not child pid
 {
  
  
  
  num++;
  printf("num = %dn",num);
 

  pause();
  time1 = times(&buf)/tick;
  gaptime += (time1 - i1);
  printf("gaptime = %ldn",gaptime);
    
  _exit(0);
  
 }
 

 sleep(5);


 
  
 i2 = times(&buf)/tick;
 if((pid = vfork()) < 0)
  printf("fork error2n");

 if((pid1 = fork()) < 0)
  printf("fork errorn");
 else if(pid1 == 0)
 {
  sleep(7);
  kill(pid,SIGINT);
  
 }
 else
  _exit(0);

 if(pid == 0)
 {
  
  num++;
  printf("num = %dn",num);
  
  pause();
  time2 = times(&buf)/tick;
  gaptime += (time2 - i2);
  printf("gaptime = %ldn",gaptime);
  
  _exit(0);
 }
 
 sleep(7);
 if((pid1 = fork()) < 0)
  printf("fork errorn");
 else if(pid1 == 0)
 {
  sleep(5);
  kill(pid,SIGINT);
  _exit(0);
 }
 else
  _exit(0);


 
 i3 = times(&buf)/tick;
 if((pid = vfork()) < 0)
  printf("fork error 3n");

 if((pid1 = fork()) < 0)
  printf("fork errorn");
 else if(pid1 == 0)
 {
  sleep(9);
  kill(pid,SIGINT);
  _exit(0);
 }

 if(pid == 0)
 {
  
  num++;
  printf("%ldn", time3);
  
  pause();
  time3 = times(&buf)/tick;
  gaptime += (time3 - i3);

  _exit(0);//for not flushing stream
  
 }
  
 sleep(9);
 
 if(num == 3)
 {
  printf("child processes's running sum time = %ld secondsn", gaptime);
 }
 return 0;

}

//여기까지 읽으면 됨 여기까지 읽으면 되 나머지는 반복 되는 부분이니까.


자식 프로세스를 여러 개 생성하고 신호로 죽인뒤, 마지막에 실행시간의 합 출력하는 프로그램인데...


 

간단하게 소스 설명을 하자면, vfork로 자식 프로세스 생성(자식 프로세스 공간에서 선언된 변수가 자식 프로세스 종료시 없어지면 실행시간을 구할 길이 없으니까 부모와 변수가 공유되는 vfork함수를 이용한거야.)하고 자식 프로세스는 pause한 뒤(앞 뒤로 times함수 호출해서 저장 해둬 나중에 실행 시간 구하려고...) 자식 프로세스 이전에 또 fork로 프로세스를 생성해서 이 프로세스는 몇초간 sleep한 뒤, vfork로 생성한 자식 프로세스를 sigint신호를 보내. 그럼 vfork로 생성한 프로세스가 pause에서 깨어나겠지 그럼 나머지 작업 수행하고 종료되. //신호까지 배운 지식으로 충분히 완벽하게 만들 수 있는 프로그램이라니까 이상한 딴지는 걸지마 뭐 ipc를 이용하라느니 이런거 그건 맨 끝이나 되야 나올 내용이니까...

근데 문제는 fork로 생성한 프로세스(vfork로 생성한 프로세스한테 sigint신호 주는 프로세스)가 코드순서대로 실행이 안되고 printf문 -> kill함수 -> printf문 순서인데 이상하게 kill함수가 2번 호출되는지 신호 처리부가 거기에서만 2번 호출되고 fork프로세스 if문에서도 순서가 뒤죽박죽이야. kill함수가 제일 먼저실행되기도 하고 아예 kill함수가 호출안되고 앞뒤 printf문만 실행되기도해... 문제가 뭔지 알려줘.ㅜㅜ



 



 


 

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
339211 오라클 인기가 많은듯? [1] ㅁㄴㅇ(59.11) 12.11.29 79 0
339210 형들 진로고민이야 ㅠㅠ ㄴㅁㅇ(210.125) 12.11.29 59 0
339209 회사 생활중 가장 황당한 상황에 봉착 [1] ㅇㅇ(58.102) 12.11.29 61 0
339208 디시 같은 사이트 만들려면 뭐 배워야 되나요? [5] 김삼디(222.236) 12.11.29 89 0
339205 크리스마스가 다가온다. 다들 모텔 예약해놔라. 덜덜(182.211) 12.11.29 64 0
339204 밑에 비트박스 하길래 dubstep 불러봄 [1] Kyle(220.244) 12.11.29 49 0
339203 대학교 커뮤니티 어플만들려면 어떤거 공부해야되나요? [2] ㅇㅅㅇ(110.70) 12.11.29 63 0
339202 어제 노트북 질렀는데 빨리 왔으면 좋겠다. 천회장(118.131) 12.11.29 43 0
339201 프로모그? 얜 뭐하는 애냐? W3(121.88) 12.11.29 19 0
339200 진로상담하러 다시찾음 [7] ben-hur(211.181) 12.11.29 89 0
339199 ㅡㅡ 돈떼어먹힘 [6] ㅁㅁ(211.244) 12.11.29 167 0
339198 형들 심심할까봐 보플로 재롱부리기 [4/3] WannaParty갤로그로 이동합니다. 12.11.29 83 1
339196 C++에서 열거형과 int를 직접 비교하는게 안전한 동작이냐? [4] ㅁㄴㄻㄹ갤로그로 이동합니다. 12.11.29 58 0
339195 아 ㅅㅂ 님드라 [3] 디시안에서살다갤로그로 이동합니다. 12.11.29 46 0
339194 야근은 자랑이 아니다. 변명거리도 아니다. JSP(182.211) 12.11.29 89 0
339193 밑에 자바 도움! 통째코딩 ㅇㄹ(116.40) 12.11.29 52 0
339192 아주아주초간단 리눅스 프로그래밍 과제대행하실분요???? 제발 도와주세요ㅠ [1] 늅늅(182.219) 12.11.29 495 0
339191 자바 라벨 이벤트관련 도움! [12] ddd(116.40) 12.11.29 59 0
339189 개발자들은 노동법이 적용되지 않는게 사실인가염?? [6] JSP(182.211) 12.11.29 92 0
339187 아따~ 요즘 일 쉬고 있는데 재취업이 힘들구만~ [4] JSP(182.211) 12.11.29 86 0
339185 이럴 때는 개발 환경 어케 구축하죠? [6] _FL(175.113) 12.11.29 119 0
339184 횽들 PreTranslateMessage 관련 질문이 있어 [4] 김삼디(222.236) 12.11.29 59 0
339183 pc 견적 하나 내주실수 있으신분? [2] 개발자(210.121) 12.11.29 59 0
339182 싱글게임의 제한좀 깨주세요 ㅠㅠ능력자형들 ㅠㅠ [8] 징기스칸4(125.182) 12.11.29 89 0
339181 MAD LAN 때릴꺼야?(116.40) 12.11.29 60 0
339180 마소의 횡포가 심하군. ㄴㅇㄹ(124.49) 12.11.29 92 0
339179 안드로이드 버튼에 관련하여 현빈같은 원빈같은 김수현같은 프갤 형들께 [1] 프램천사(121.186) 12.11.29 91 0
339178 답변같은글이 안올라와서 또올림 웹개발 신입에 대해서 [1] ㄴㅇㄹ(125.178) 12.11.29 92 0
339177 좀 특이한 아이피블럭인거같은데, 도대체 뭐가 블럭된건줄 모르겠어요. [7] 오누오하(112.155) 12.11.29 169 0
339176 아차 여기서 팁 [3] 아놔식빵(1.232) 12.11.29 53 0
339172 주소값 변경하는 법 없나요.. [1] 주소(112.170) 12.11.29 62 0
339171 아 행복한 시즌이다.. ㅋㄱ(183.96) 12.11.29 49 0
339170 안드로 게이들아 할 거 없으면 노인용 런쳐나 만들시오 [1] dot(59.5) 12.11.29 80 0
339169 형들 리눅스깔아놓고 윈도우환경으로 사용할 수 있는 툴 머 없음? [34] 아놔식빵(1.232) 12.11.29 179 0
339168 맥북에 윈도우깔고 비주얼스튜디오?? 엥??(112.159) 12.11.29 169 0
339167 안드로이드에서 Linearlayout 사용하는데 .. 궁금한점! [2] 프램천사(121.186) 12.11.29 97 0
339166 어느 말이 올은거?? [6] IT업계희망자(116.120) 12.11.29 132 0
339165 웹프로그래밍좀 하는형들? [9] Isengard(121.168) 12.11.29 194 0
339161 형님들 어셈블리어 과제 질문용 (조공) [1] 형들(121.181) 12.11.28 199 0
339160 일을하면서 생각하는건데 [3] Adelposs(168.248) 12.11.28 114 0
339159 제발 제 소원인 싱글게임의 제한을 깨주실분 구합니다 ㅠㅠ [12] 징기스칸4(125.182) 12.11.28 146 0
339158 형들 노트북 어떤거써? [9] WannaParty갤로그로 이동합니다. 12.11.28 222 0
339157 할수있다라고 생각해보면 가능해지더라 상상(110.70) 12.11.28 44 0
339156 진로 상담좀 [13] -_-(116.120) 12.11.28 183 0
339155 외국에서 대학교 졸업하고 한국들가서 프로그래밍으로 먹고살려면 좆되나여? [1] &#039;-^(165.146) 12.11.28 117 0
339154 리눅스는 일반인이 쓸만한 물건은 아닌가 보다 -_-;; [3] 생각놀이갤로그로 이동합니다. 12.11.28 170 0
339153 아...현실은 힘드네요 [1] 열정(1.250) 12.11.28 49 0
339152 우분투 12.10 양자적 케찰 사용 후기 구루구루(119.64) 12.11.28 73 0
339151 자바하나만 배워도 취직 되나요?? [7] 스포츠토토(116.120) 12.11.28 230 0
339149 함수 포인터.. 난이도 극강-ㅁ-;; 도와주세요! [1] 포인터 어려워(49.143) 12.11.28 99 0
뉴스 정동원, ‘걍남자’서 임영웅과 1박 2일 캠핑 여행 "찐형제 케미" 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2