디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 54 추천 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/07/14 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
338725 자바고수님들.. . . . . Null 값도 값인가요? [3] ff(116.44) 12.11.25 103 0
338721 RPG만들기2000 마스터 하고 싶다. [3] 영꼰이갤로그로 이동합니다. 12.11.25 127 0
338720 프로그래머는 천재 없지않냐 [1] 뉴비(1.210) 12.11.25 146 0
338719 사과란 단어가 빨간색을 어떻게 나타내는지 알게뭐냐 뉴비(1.210) 12.11.25 50 0
338718 알파벳도 모르는 놈이 추상적인 단어에 대해 묻는격 뉴비(1.210) 12.11.25 60 0
338717 directX 해볼까? [3] 티버애니갤로그로 이동합니다. 12.11.25 88 0
338716 API 이용해서 피아노 만들고 있는데 7225(219.252) 12.11.25 66 0
338715 오늘첨님 님이 원하는 게임은 C언어 같은 쓰레기로 만든 게 아니예요 ㅋ [3] 영꼰이갤로그로 이동합니다. 12.11.25 167 0
338714 c언어배우면 이런게임밖에 못만드나요??? [66] 오늘첨(121.176) 12.11.25 534 1
338712 이거 왜 중간에 코드 건너 뛰지요(코드 짧음) [1] ㅇㅇ(203.90) 12.11.25 51 0
338711 c언어 배워서 어디다가쓰나여? [2] 오늘첨(121.176) 12.11.25 93 0
338709 c언어 개발하는거보면 전부다 콘솔창 가지고 지랄하던데 그걸로 뭐 어디에써 [3] 오늘첨(121.176) 12.11.25 111 0
338708 형들 노트북 추천좀 [4] WannaParty갤로그로 이동합니다. 12.11.25 145 0
338707 우분투에서 코딩하니까 은근 좋다 [1] ㄹㅇㄴㅁ(115.20) 12.11.25 124 0
338706 cmd파일 편집 질문 병신(125.208) 12.11.25 77 0
338705 근데 꼭 천재와 바보의 차이가 아니더라도 머리 차이는 있지않냐??? [4] ㅇㅇ(203.90) 12.11.25 120 0
338703 c언어 기본만 끝내는데 대충 몇달 걸림? [3] 개발툴추천좀(121.176) 12.11.25 119 0
338702 c언어 개발툴 뭐없냐?? 비쥬얼스튜디오말고 [6] 개발툴추천좀(121.176) 12.11.25 175 0
338701 matlab 허세용 언어아님? [1] ㅁㄴㅇㄴ(59.11) 12.11.25 82 0
338700 자꾸 책추천 책추천 그러는데 책사는법 알려준다 ㅁㄴㅇㄴ(59.11) 12.11.25 47 0
338699 이정도면 선정리 甲아님? [3] ㅇㅇㅇ(1.209) 12.11.25 142 0
338698 vc++만 쓰다가 오랜만에 이클립스 최신판 써본 소감.txt [5] 김주갤(125.177) 12.11.25 115 0
338697 아냐 확실히 물 쓰레기된건 사실 [6] 김주갤(125.177) 12.11.25 145 0
338696 HTML5 책 추천좀 해주세요 [5] 네로시엔갤로그로 이동합니다. 12.11.25 161 0
338695 아! 내가 해냈다! [4] appllee갤로그로 이동합니다. 12.11.25 100 0
338694 확실히 프갤 많이 바꼈다 [3] 김주갤(125.177) 12.11.25 96 0
338693 매트랩은 도대체 어따 써먹나염 [2] 에루스(223.33) 12.11.25 98 0
338692 xp에 이클립스 깔았는데 괄호 찾기가 안된다;;;;;;;;;; 으아아아악(125.177) 12.11.25 99 0
338690 여자 음부에서 식초냄새날까? 이쁜 메이크업 뒤어 숨겨저있는 공포네 [1] Kyle(220.244) 12.11.25 342 0
338689 dc차단기를 만들껀데 aa2(211.244) 12.11.25 38 0
338688 프로그래밍 잘하게되고싶다 티버애니갤로그로 이동합니다. 12.11.25 59 0
338687 Kyle's Quest란 게임이 있었지 에어로홍갤로그로 이동합니다. 12.11.25 68 0
338686 왜 내 도메인은 www. 붙여야 되는거임 [4] appllee갤로그로 이동합니다. 12.11.25 105 0
338685 페이스북 사용할때 불편했던 단점같은것좀 말해주라 [3] 아이디(121.176) 12.11.25 80 0
338682 게임핵 만드려면 어느정도 실력이여야되나요? [1] Coffee갤로그로 이동합니다. 12.11.25 164 0
338681 천재 프로그래머라하면 어떤게 천재임? [7] r(175.192) 12.11.25 450 0
338672 1년차 지방 이직 할때 단가가 얼마정도인가요? 3424(121.183) 12.11.25 52 0
338669 1990년대 초부터 시작해서 작금에 이르기까지 이럴수가! [2] 때릴꺼야?(116.40) 12.11.25 111 0
338668 c언어 초보인데 이것좀 알려주세요 초보(175.206) 12.11.25 80 0
338667 리버싱 초고수가 될거다 리버싱갤로그로 이동합니다. 12.11.25 71 0
338666 지금 전문학교 다니는중인데 후회된다... [3] ㅁㄴㅇ(119.82) 12.11.25 213 0
338664 소켓+MFC로 2D 축구게임 만드려고 하는데 어떨거같냐? [5] ㅁㄴㅇ(119.82) 12.11.25 145 0
338663 니네 포탈건 있으면 뭐할거냐 [5] (59.14) 12.11.25 146 1
338662 pc용 게임 개발하면 어떻게팜? [4] 티버애니갤로그로 이동합니다. 12.11.25 132 0
338660 세그먼트 오류 어디서 발생한지 알수있는법 있나여? [1] (220.94) 12.11.25 76 0
338657 소켓통신에서 멀티플렉싱이랑 멀티스레드중 속도 어느게 빠르나요 [1] c(121.145) 12.11.25 117 0
338656 2차원배열에 쓰기좋은 반복문 없음? appllee갤로그로 이동합니다. 12.11.25 69 0
338654 2D 개발엔진 찾아보니 [14] 뉴비(223.33) 12.11.24 232 0
338653 에휴..... ㅇ.갤로그로 이동합니다. 12.11.24 30 0
338651 내 고추를 스스로빨면 그게 근친상간임 아님 게이임? [5] sxbxb(220.244) 12.11.24 499 0
뉴스 지드래곤, 8월 방콕 콘서트 취소 디시트렌드 07.11
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2