디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 55 추천 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 휴대폰 액세서리 SALE 운영자 25/07/15 - -
339414 C로 짠 게임을 CPP로 바꿔보고있는데 CPP에서는 전역변수 무조건 쓰면 [4] ㅇㅇ(119.201) 12.12.01 111 0
339413 Kyle에게 추천하는 노래. ㅇㅇ ☎2.51™갤로그로 이동합니다. 12.12.01 51 0
339412 신입 뽑을때 어느정도 수준을 예상하나요? [4] 123(58.233) 12.12.01 243 0
339411 프로그래밍의 난제.txt [4] ㅁㅁ(211.244) 12.12.01 145 0
339410 매트랩 for문에대해서 하나만 가르쳐주실분 [1] aoxmfoq(1.236) 12.12.01 48 0
339409 보지보지~ 룰루루 보지~ [3] Kyle(220.244) 12.12.01 111 0
339408 어떻게 it전공자가 그네를 욕할수잇지 [2] (211.234) 12.12.01 122 0
339407 sql 인젝션 되는곳이 없네 없어... [4] ㅇㅇ(119.197) 12.12.01 100 0
339406 스프링 너무 어렵다 ㅠㅠ AngryVGN갤로그로 이동합니다. 12.12.01 65 0
339405 팬티엄4인데 [2] (211.234) 12.12.01 58 0
339403 대학졸업하고 IT국비지원 학원다니는게 과연 맞을까요? [1] 어렵다.(175.127) 12.12.01 225 0
339401 플래시 개발할 때 이 종류들 차이점이 뭐냐? 후레시(14.145) 12.12.01 49 0
339400 진지하게 vs 유동(121.189) 12.12.01 59 0
339398 8051 어셈블리어좀 아시는분 공돌이(118.39) 12.12.01 50 0
339397 서버를 사용하는 재고관리 프로그램을 만들고 있는데 삼만(121.128) 12.12.01 47 0
339394 컴공에서 퀄컴들어가기 힘들어? sldkj(118.33) 12.12.01 57 0
339393 트위터도 복잡하네 김소은공부법갤로그로 이동합니다. 12.12.01 54 0
339392 물어 볼게 있어서 프밍갤 함 왔는데 사람있나? [3] 시베스갤로그로 이동합니다. 12.12.01 118 0
339390 형들 C언어 성적관리 프로그램인데 봐줘 ㅠㅠ 삭제문제 [2] 1234(210.117) 12.12.01 138 0
339389 웹해킹 [3] Lucyliu(182.208) 12.12.01 219 0
339387 디시 갤러리 홈피 메인에 프로그래밍 갤러리 없다 [1] ddads(218.48) 12.12.01 57 0
339386 컴공 2학년인데 프로그래밍 개짜증난다 ㅡㅡ [2] Prographer갤로그로 이동합니다. 12.12.01 232 0
339384 형들 오픈지엘좀 도와주세요 ㅠㅠ [2] 디씨인(1.243) 12.12.01 53 0
339383 치킨을 시켰는데 문화상품권을 주면 어떤 반응일까? [4] 영꼰이갤로그로 이동합니다. 12.12.01 1235 0
339382 프로그래밍 갤러리는 어떤 카테고리에 있음? [3] ddads(218.48) 12.12.01 183 0
339381 흉들 이런걸 만드려는 뭘공부해야될까요 [1] 비장(210.213) 12.12.01 77 0
339379 선거 유세 시작되었으니 이젠 인터넷에 잘못 씨부리면 잡혀감?? JSP(182.211) 12.12.01 41 0
339378 안드로이드 몽키러너 써본 사람 지나가다(223.62) 12.12.01 138 0
339377 루아 스크립트 써보거나 공부해본 사람 있나? [16] 영꼰이갤로그로 이동합니다. 12.12.01 340 0
339376 회사에서 면접 볼 때 특정 표기법을 요구한다는 게 가능함? [13] 영꼰이(116.120) 12.11.30 213 0
339375 ㄷㄷㄷ 악성코딩느님 C, C++에 이어 자바까지 ㄷㄷ [1] 영꼰이(116.120) 12.11.30 96 0
339374 능력자형들 이클립스에서 자바코드좀 만들어줘 [2] 박뱅오브다니아(223.62) 12.11.30 57 0
339373 소켓으로 간단한 온라인게임 만들고싶은데요 [1] ㄷㄷ(110.70) 12.11.30 65 0
339372 화려한 구로IT단지, 여전히 근로기준법 위반 (경향 12.11.30) [1] 밍키맨(112.171) 12.11.30 117 0
339371 [MD포토] 별 '내사랑 하하의 달콤 키스' 에어로홍갤로그로 이동합니다. 12.11.30 30 0
339370 정보처리기사책으로 산업기사 공부돼냐? [1] ㅁㅇㄴㅁ(115.161) 12.11.30 59 0
339369 면접시간이 30분이었는데 1시간 가까이 봤음.. 뭘까..? [3] ㅁㄴㅇㄹ(121.190) 12.11.30 163 0
339368 씨팔 내일도 출근이다 [2] ??(123.228) 12.11.30 60 0
339366 기획자랑 의사 소통 안되면 기획자 잘못이냐? 프로그래머 잘못이냐? [3] dd(121.133) 12.11.30 140 0
339364 형들 얘 먼소리하는거야? [5] 논새비어갤로그로 이동합니다. 12.11.30 110 0
339362 책잘못사서그런데 봐주셈 [2] ㅇㅁㄴ(211.245) 12.11.30 57 0
339361 횽들 자바 질문있는데 .. (디테일 하게 올려봄) [9] 자바(1.250) 12.11.30 80 0
339357 나 프로그래밍 배우려고 하는 게이인데요 [2] 입력하시게갤로그로 이동합니다. 12.11.30 84 0
339356 횽들 자바 질문있는데 [2] 자바(1.250) 12.11.30 46 0
339355 알고리즘 퀴즈 [6] ELUU갤로그로 이동합니다. 12.11.30 122 0
339354 프갤현자님들 자바스크립트 입문서적점 [1] 마루■갤로그로 이동합니다. 12.11.30 55 0
339353 롱자지 로켓트!~ 룰루루 [1] Kyle(220.244) 12.11.30 39 0
339351 프갤러님들 C++입문서좀 추천해주세여 [4] 사얏갤로그로 이동합니다. 12.11.30 88 0
339349 node.js에서 멀티쓰레드 운운하는 놈들은 뭐냐 [4] 천회장(118.131) 12.11.30 144 0
339348 흔한 웹프 모집요강 [1] 웹웩(182.211) 12.11.30 122 0
뉴스 “이수근, 재산·명의 모두 넘겼다”…눈물나는 사정 전했다 디시트렌드 07.15
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2