디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 51 추천 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/07 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
338765 형들 어플만들고 있는데 좀 도와줘요 [3] 당근의유혹갤로그로 이동합니다. 12.11.26 113 0
338763 외주 했는데 입금이 안됨 [1] d(175.192) 12.11.26 72 0
338762 근대 정보처리기사는 그나마양호한건다. 미용자격증은 어떤건지아냐? [2] 외국여행가자(59.26) 12.11.26 151 0
338761 Visual C++는 거대한 switch-case를 어떻게 처리하는가 r(175.192) 12.11.26 106 0
338760 정보처리기사 ..시바 한달동안공부해서 겨우딴나는뭐냐 [4] 외국여행가자(59.26) 12.11.26 257 0
338756 혹시 DB,asp 하실줄 아시는분있나요? 수고비드려요 [1] 뉴뉴(119.206) 12.11.26 56 0
338755 정보처리기사 이거 심각하네 [5] dd(182.215) 12.11.26 239 1
338752 C++ 고수를 찾습니다. [10] 고수를찾다(180.64) 12.11.25 178 0
338750 지금 다큐멘터리 3일 봐봐 다크엔젤z갤로그로 이동합니다. 12.11.25 84 0
338748 MAD LAN [1] 때릴꺼야?(116.40) 12.11.25 76 0
338745 플게이들아 이제 막 프로그래밍 공부해보려는 좆대딩 3학년인데 [4] ㅇㅇㅇ(122.34) 12.11.25 202 0
338744 안드로이드 버튼 이미지에 관해서 하나 여쭤볼게영.. [4] 프램천사(121.186) 12.11.25 61 0
338742 안드로이드 게임들 ... 결제크랙 만들줄 아시는분 연락바래요 [5] 사시미(210.123) 12.11.25 184 0
338741 jquery ajax 질문 하나만 한다 [11] 리버싱갤로그로 이동합니다. 12.11.25 139 0
338740 프갤에 개고수님들이 많다고 하여 올려봅니다. ㅎㅎㅎㅎ(119.198) 12.11.25 58 0
338739 C# 고수님들 부탁좀 드립니다.. [2] 정세희입니다.갤로그로 이동합니다. 12.11.25 136 0
338738 저내일 진짜 옆집가서 물어보고옴 새우튀김가루갤로그로 이동합니다. 12.11.25 59 0
338737 하앍 트위터 플텍계정 뚫고싶다 ㄹㅇㄴㅁ(115.20) 12.11.25 6004 0
338735 리눅스에서 윈도우의 BitLocker 드라이브 암호화 같은거 없나요? [3] 학생(195.60) 12.11.25 192 0
338734 db 테이블 한글 여백에 대해 질문점여 [4] db질문점(211.234) 12.11.25 68 0
338733 directx써서 작업표시줄 3d로 바꾸면 재밋을듯 [4] 티버애니갤로그로 이동합니다. 12.11.25 84 0
338731 펌웨어 프로그래밍 어려움?? 조낸 노가다임?? 노인(182.211) 12.11.25 57 0
338730 후........ 나이가 많아서 취업이 안되는 듯 하다. [2] 노인(182.211) 12.11.25 160 0
338728 아오 게임 프레임이 왜이러냐 [6] 설리(119.199) 12.11.25 116 0
338726 동물 키우고싶다 [2] 정수정•‿•갤로그로 이동합니다. 12.11.25 84 0
338725 자바고수님들.. . . . . Null 값도 값인가요? [3] ff(116.44) 12.11.25 101 0
338721 RPG만들기2000 마스터 하고 싶다. [3] 영꼰이갤로그로 이동합니다. 12.11.25 125 0
338720 프로그래머는 천재 없지않냐 [1] 뉴비(1.210) 12.11.25 141 0
338719 사과란 단어가 빨간색을 어떻게 나타내는지 알게뭐냐 뉴비(1.210) 12.11.25 48 0
338718 알파벳도 모르는 놈이 추상적인 단어에 대해 묻는격 뉴비(1.210) 12.11.25 59 0
338717 directX 해볼까? [3] 티버애니갤로그로 이동합니다. 12.11.25 83 0
338716 API 이용해서 피아노 만들고 있는데 7225(219.252) 12.11.25 65 0
338715 오늘첨님 님이 원하는 게임은 C언어 같은 쓰레기로 만든 게 아니예요 ㅋ [3] 영꼰이갤로그로 이동합니다. 12.11.25 163 0
338714 c언어배우면 이런게임밖에 못만드나요??? [66] 오늘첨(121.176) 12.11.25 531 1
338712 이거 왜 중간에 코드 건너 뛰지요(코드 짧음) [1] ㅇㅇ(203.90) 12.11.25 43 0
338711 c언어 배워서 어디다가쓰나여? [2] 오늘첨(121.176) 12.11.25 89 0
338709 c언어 개발하는거보면 전부다 콘솔창 가지고 지랄하던데 그걸로 뭐 어디에써 [3] 오늘첨(121.176) 12.11.25 110 0
338708 형들 노트북 추천좀 [4] WannaParty갤로그로 이동합니다. 12.11.25 137 0
338707 우분투에서 코딩하니까 은근 좋다 [1] ㄹㅇㄴㅁ(115.20) 12.11.25 121 0
338706 cmd파일 편집 질문 병신(125.208) 12.11.25 74 0
338705 근데 꼭 천재와 바보의 차이가 아니더라도 머리 차이는 있지않냐??? [4] ㅇㅇ(203.90) 12.11.25 116 0
338703 c언어 기본만 끝내는데 대충 몇달 걸림? [3] 개발툴추천좀(121.176) 12.11.25 117 0
338702 c언어 개발툴 뭐없냐?? 비쥬얼스튜디오말고 [6] 개발툴추천좀(121.176) 12.11.25 175 0
338701 matlab 허세용 언어아님? [1] ㅁㄴㅇㄴ(59.11) 12.11.25 80 0
338700 자꾸 책추천 책추천 그러는데 책사는법 알려준다 ㅁㄴㅇㄴ(59.11) 12.11.25 46 0
338699 이정도면 선정리 甲아님? [3] ㅇㅇㅇ(1.209) 12.11.25 136 0
338698 vc++만 쓰다가 오랜만에 이클립스 최신판 써본 소감.txt [5] 김주갤(125.177) 12.11.25 113 0
338697 아냐 확실히 물 쓰레기된건 사실 [6] 김주갤(125.177) 12.11.25 138 0
338696 HTML5 책 추천좀 해주세요 [5] 네로시엔갤로그로 이동합니다. 12.11.25 160 0
338695 아! 내가 해냈다! [4] appllee갤로그로 이동합니다. 12.11.25 98 0
뉴스 [탐정들의 영업비밀] 등산 간다던 유부녀 지갑에서 '콘돔' 발견? 야한 속옷 챙겨 입고 모텔서 남자와...'빼박 불륜'? 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2