디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅇㅇ(203.90) 2012.11.24 16:08:09
조회 52 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45261 65
2870510 소련 사회주의의 실패적 원인은 외부 자본주의와 결탁하면서 실패함 [1] ㅆㅇㅆ(124.216) 00:27 16 0
2870509 “독재정권 한강 개발로 해운대 700배 백사장 사라져” 발명도둑잡기(118.216) 00:26 10 0
2870508 “2600만 마리 떼죽음… 역대 최악 지난해 재현되면 우짤꼬?” 발명도둑잡기(118.216) 00:24 11 0
2870507 가끔 뭔 공산주의 같은 마인드를 한놈들이 보여. 노동의 가치창출 말이야 ㅆㅇㅆ(124.216) 00:23 13 0
2870506 [스트레이트] "검찰 역사 최악의 치욕" 발명도둑잡기(118.216) 00:22 12 0
2870505 "'팔레스타인 집단 학살' 가담해 한국기업 이익 창출했다" 발명도둑잡기(118.216) 00:20 9 0
2870504 gpt는 답 아니면서 답인 것처럼 말하는 거 많은데 [5] 아스카영원히사랑해갤로그로 이동합니다. 00:19 25 0
2870503 개발자는 자기의지 가지고 성장 안됨 [3] 프갤러(1.245) 00:17 30 0
2870502 취직을 했는데 안간거지 취직을 못한게 아닌데 이 차이 구분을 못하노 ㅆㅇㅆ(124.216) 00:11 20 0
2870501 “어? 예쁜 조개다” 덥석 잡았다가 죽을 뻔했습니다…정체 알고 보니 발명도둑잡기(118.216) 00:11 11 0
2870500 곽원태 천안시 서북구청장, 중국 여행 중 갑작스러운 별세 발명도둑잡기(118.216) 00:09 12 0
2870499 개발자는 주변환경이 정말 중요한듯 [1] 프갤러(1.245) 00:08 27 0
2870497 게임업계의 창과 방패 (크랙방지 vs 크래커) 발명도둑잡기(118.216) 00:01 11 0
2870496 커서 살까말까 고민되네 [2] 프갤러(211.46) 07.07 35 0
2870495 고춧가루 ㅇㅇ(117.111) 07.07 15 0
2870494 갠적으로 코딩 실력보다 단체에서는 조직 요구사항을 빠르게 [2] ㅆㅇㅆ(124.216) 07.07 39 1
2870493 개발 고수, 중수, 초보 ㅇㅇ(125.179) 07.07 29 0
2870492 프갤 오는 시니어들은 전부 자기는 잘하는데 승진하는 애들은 ㅆㅇㅆ(124.216) 07.07 20 0
2870491 신입에게 조언. 배워야 공부해야 할 것. 퇴사 사유. [4] 프갤러(59.16) 07.07 44 0
2870490 서유리 님 께서 사회인 코스프레 하지말라고 발언을 말하셨는데, 넥도리아(121.139) 07.07 32 0
2870489 깃도 공부할 거 많네 [6] 아스카영원히사랑해갤로그로 이동합니다. 07.07 67 0
2870487 잼민이 성능 미쳣네 ㄹㅇ 프갤러(61.75) 07.07 21 0
2870485 자동화 관련 질문 (http호출) [2] ㅇㅇ(114.206) 07.07 36 0
2870484 디시에 악플유저들은 새싹 원종이임 [2] 조루디(118.235) 07.07 21 0
2870483 맥미니 m4 32 512 개발하기 충분? [3] 조루디(118.235) 07.07 34 0
2870482 알고리즘 자료구조 이런거 누가 만들었냐 [1] 뒷통수한방(1.213) 07.07 30 0
2870481 랠릿 허브 << 최근 너무 더러워짐 프갤러(211.234) 07.07 35 0
2870480 Blockudoku 알고리즘 대결 만들었어 한번만해죠 프갤러(118.235) 07.07 26 0
2870479 자사 서비스 있는 스타트업 어떰? 프갤러(1.233) 07.07 25 0
2870477 재야학계 책보고 아저씨, 제가 역사는 모르지만 [1] 넥도리아(175.196) 07.07 13 0
2870474 근데 슼유동아 궁금한게 한 8개월 넘게 따라다녔는데 안 지겹냐 [3] ㅆㅇㅆ(124.216) 07.07 39 0
2870472 현실부정하다 아카이브 보여주면 빤스런 하는건 똑같노 ㅇㅇ(211.235) 07.07 36 5
2870470 또또 아카이브 내 글 따가며 도배하는 모습이 똑같노 ㅋㅋㅋ ㅆㅇㅆ(124.216) 07.07 25 0
2870469 아니 근데 신기하지 않냐 저 슼유동 VPN까지 써가며 날 증오하는데 [1] ㅆㅇㅆ(124.216) 07.07 25 0
2870467 프갤에서 념글구걸하고 개추주작하고 [6] ㅇㅇ(211.235) 07.07 44 4
2870466 류도그담당=114.202=59.14=ㅆㅇㅆ [1] ㅇㅇ(45.84) 07.07 52 5
2870464 슼 유동 점마 대단한게 49.165행님한테도 개좆털리고 [3] ㅆㅇㅆ(124.216) 07.07 34 0
2870462 준석이 프로그램 비평하셈 [1] ㅇㅇ(211.241) 07.07 48 0
2870460 [그래픽] 여름휴가 언제 많이 가나 발명도둑잡기(118.216) 07.07 21 0
2870458 또 조현병 슼유동 와서 시비거노 [2] ㅆㅇㅆ(124.216) 07.07 27 0
2870456 정치글, 남탓 무한반복 [2] ㅇㅇ(211.235) 07.07 31 4
2870455 코딩 잘하려면 이렇게만 하세요 프갤러(175.115) 07.07 31 0
2870453 나님 누엇어양❤+ ♥냥덩이♥갤로그로 이동합니다. 07.07 24 0
2870452 일본하면 카타나 수리검 닌자 사무라이 [4] 배구공(119.202) 07.07 28 0
2870450 ㅅㅂ ㅈ됨 [4] ㅇㅇ(180.65) 07.07 70 0
2870449 근데 재매이햄 대통령으로써 능력있게 나름 잘하고 계시노 [6] ㅆㅇㅆ(124.216) 07.07 65 1
2870448 ADHD용 플래너 앱 기획했는데 어떰? ㅇㅇ(118.235) 07.07 30 0
2870447 일본이라고 부르는 것부터가 문제다. 프갤러(223.55) 07.07 29 0
2870446 민생 소비 쿠폰 뭐 사야하나. 데이터 복구하고싶은데 그러면 안될 것 같해 넥도리아(175.196) 07.07 17 0
뉴스 ‘펜싱’ 오상욱, 日 모델 열애설에 침묵…“애인 있냐” 질문에 보인 반응 디시트렌드 07.07
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2