디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 49 추천 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 - -
339007 dev c++ 한글 ㅁ으로 나오는데 어찌해야 돼요 ㅜㅜ [3] 햇공돌이(122.128) 12.11.27 66 0
339004 운영체제 과목인데 필기한걸 모르겠다... 설명 좀 제발.ㅜㅜ ㅇㅇ(203.90) 12.11.27 52 0
339003 API 공부하는데 이게 뭔가요? [2] 이거뭔가요(211.194) 12.11.27 67 0
339002 안녕하세요형들 J to the 1갤로그로 이동합니다. 12.11.27 28 0
338999 형들 주석문 해석좀 부탁드립니다. 너무어려워요 [7] ㅇㅇ(211.173) 12.11.27 66 1
338998 지방에서 서울쪽 학원다니는갤러있어? [4] 이세상끝에서갤로그로 이동합니다. 12.11.27 101 0
338997 리눅스 쉘스크립트로 특정 확장자 파일 전체 확장자 붙여서 복사 [6] 위디안(115.91) 12.11.27 55 0
338995 컴공 과제 셔틀 사이트 어떰? [8] 영꼰이갤로그로 이동합니다. 12.11.27 258 0
338994 erp 종사자들은 엄나 [2] ㅁㅁ(203.226) 12.11.27 98 0
338992 안드로이드 에뮬레이터 모든걸 제대로 다 했는데... 에뮬 봐줘요 [10] 궁금한게많으갤로그로 이동합니다. 12.11.27 106 0
338991 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. ☎2.51™갤로그로 이동합니다. 12.11.27 69 0
338990 dev c++ 로 c언어로 작성한 프로그램이 작동안되는이유 아는분있나요? [3] ㅇㅇ(211.173) 12.11.27 72 0
338989 리눅스 쉘스크립트로 특정 확장자 파일 전체 다른확장자로 복사 [5] 위디안(115.91) 12.11.27 41 0
338988 안드) 와이파이전용기기에서 3g, 4g 네트워크 정보 못가져오냐? [7] 얼룩돼지갤로그로 이동합니다. 12.11.27 115 0
338987 linker error 이라는게 뭔가요? [1] ㅇㅇ(211.173) 12.11.27 37 0
338986 책한권 다 끝내고 어떻게 공부 하는게 좋을 까요?? [1] 열정(1.250) 12.11.27 57 0
338985 얼굴이 이쁜 여자는 많습니다. 성격이 착한 여자도 많습니다. [2] 영꼰이갤로그로 이동합니다. 12.11.27 151 0
338983 dev c++로 자기소개서 써야되는데 아... 어떻게써야하는지모르겠음 [5] ㅇㅇ(211.173) 12.11.27 78 0
338982 마음만 착한 여자 vs 얼굴만 착한 여자 [2] 미스테리(182.211) 12.11.27 119 0
338981 아놔ㅡㅡ. . . 다크엔젤z갤로그로 이동합니다. 12.11.27 26 0
338978 하여간 여자라는 동물은 정말 미스테리다 미스테리(182.211) 12.11.27 68 0
338977 C) 배열전체에한꺼번에 널값주는법잇음? [21] (211.246) 12.11.27 233 0
338976 인터넷 페이지 저장해서 볼수 있나요? [8] empty(220.70) 12.11.27 301 0
338975 아오 시밤 이클립스에서 자바빈즈 컴파일 하는데 클래스 파일이 안만들어짐 [2] jsp(182.211) 12.11.27 62 0
338973 IT 입문자에게 [1] 개발자(119.201) 12.11.27 153 0
338971 씨발여긴 글제목만봐도 [1] ㅁㄴㅇ(175.194) 12.11.27 55 0
338970 궁금한거 3가지 있습니다. [5] ㄱㄱㄱ(175.192) 12.11.27 70 0
338969 고민이 잇어 형들.. 조언좀 부탁해 [13] PandaMango갤로그로 이동합니다. 12.11.27 166 0
338967 상암동 누리꿈 공개소프트웨어 데이 왔는데 [1] 에어로홍갤로그로 이동합니다. 12.11.27 53 0
338966 요즘 HDSI툴 먹히는 홈페이지 없겠찌? [1] dd(119.197) 12.11.27 41 0
338965 ASP.NET는 사망직전인가여?? jsp가 킹인가여?? [2] C#(182.211) 12.11.27 104 0
338964 실전프로젝트 C# 4.0 샀는데 ............. 망책이라니 ㅠ [3] C#(182.211) 12.11.27 109 0
338962 영양가 있는 글을 올리자... ㅋㄱ(183.96) 12.11.27 33 0
338961 비트 다니는사람있냐? 진짜 개인적인거 [1] ㅂ맛갤로그로 이동합니다. 12.11.27 151 0
338959 ? 난 학부때도 회사에서도 조금이라도 뚱뚱한 년 못봤는데 [2] 영꼰이갤로그로 이동합니다. 12.11.27 95 0
338958 일반적으로 무자본 개인 월수익의 1차 한계는 350~500사이 인것 같다 [6] ☎2.51™갤로그로 이동합니다. 12.11.27 196 0
338957 나도 공감한다 프갤 영양가가 없음 [8] 에어로홍갤로그로 이동합니다. 12.11.27 198 0
338956 개인 프로젝트를 C++, C#으로 만들었는데 [3] 나다라마법사(112.173) 12.11.27 116 0
338955 입문서적계의 레전드.jpg [3] d(125.177) 12.11.27 279 0
338954 it쪽에 평소 보기 힘든 돼지녀가 많은 이유는? [3] ㅁㄴㅇㄴㅇ(59.11) 12.11.27 115 0
338953 아 프갤재미없다 놀아줄려고해도 반응을 안함 [1] Kyle(220.244) 12.11.27 49 0
338952 갤에 안드로이드 하는놈 몇놈이냐 [5] 얼룩돼지갤로그로 이동합니다. 12.11.27 108 0
338946 갑자기 생각나는 삼촌이라는 유저의 과거 명언.list [6] Kyle(220.244) 12.11.27 183 0
338944 난 사실 gay converter다 Kyle(220.244) 12.11.27 38 0
338942 MVVM 패턴쓰는게이있음? [2] 장승업ㅂ갤로그로 이동합니다. 12.11.27 129 0
338939 형들, 싱글톤패턴으로 코드를 짰는데 좀 물어볼게 있어 [2] ㄴㄴ갤로그로 이동합니다. 12.11.27 64 0
338938 스스로의 자지를 빨려고 노렷했습니다 [2] Kyle(220.244) 12.11.27 203 0
338937 니들 중에 평균임금도 안되는 사람 있냐 ? ㅇㅇ ? [1] ☎2.51™갤로그로 이동합니다. 12.11.27 103 0
338935 나이제 뭐먹고살아야하냐 ㅡㅡㅋ [3] 장승업ㅂ갤로그로 이동합니다. 12.11.27 102 0
338934 박근혜가 여성고위공무원,여교수 비율을 늘린다네.. 백준은 멘붕올듯 [1] 마오(121.165) 12.11.27 54 0
뉴스 '꼬꼬무', 연쇄살인범 강호순 자백 최초 영상 공개. . . 10명 외 추가 피해자 존재 가능성 충격 보도 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2