프로세스가 죽지를 않아요..
글쓴이: jinushun / 작성시간: 금, 2003/08/08 - 11:05오후
포크를 시켜서 둘다 특정경우 죽이려 하는데 이놈의 자식놈 -_- 이 죽지를 않네요.
아래는 코드입니다.
int c; /*or */ char c; pid = fork(); if (pid > 0) { while(1) { c = getc(stdin); write(fd, &c, 1); if(c == 3) { //wait(NULL); close(fd); exit(0); } } } if (pid == 0) { while(1) { read(fd,&c, 1); if(c == 3) { printf("DEBUG\n\n"); close(fd); exit(0); } write(1, &c, 1); } }
이상인데요..
int c 일때..
ctrl + c 를 누르면 부모 프로세스 는 죽습니다.ps 해보면
자식은 안죽고 살아있어요
wait 를 넣어도 안죽더군요.
DEBUG 가 안찍히고 커서가 한칸 밀리는 걸 봐서 자식의 if 문이 수행이 안됩니다.
왜그런거죠?
근데 웃긴건 char c; 일때는 프로세스가 둘다 죽더군요. 이상합니다.
이때 는 DEBUG 는 찍힙니다.
int 와 char 의 차이인것 같은데.
깊이 있는 공부가 없는 저로서는 -_-;;(학교때 무쟈게 놀았거든요)..
이유가 궁금한데요.
설명좀해주세요 ^^
그럼 수고하십시오
Forums:
byte order문제가 아닐까요?혹시 PowerPC나 Sparc
byte order문제가 아닐까요?
혹시 PowerPC나 Sparc계열에서 돌리신게 아닌지 궁금합니다.
PC 에서 수행한 작업이에요 ^^왜그런 거지 ..-_-;;
PC 에서 수행한 작업이에요 ^^
왜그런 거지 ..-_-;;
----------------------------
www.nate.com
----------------------------
음..
자식놈이 계속 읽고 쓰기를 하고 있군요.
자식놈은 읽기만 해야할 거 같습니다. 예를 들어,
자식: read x
부모: write 3
자식: write x
이런 순의 연산이 돼버리면, 부모는 정당한 종료 값을 썼는데 자식놈이 덮어써
버리니깐 계속 x 라는 값을 읽겠죠..
그리고, read/write 를 하게 되면 file descriptor 가 파일내에서 가리키는
위치가 변하니까 부모/자식 공히 한번 루프를 돌때마다 open/close 를 해줘
야 할 거 같구요.
비교할 때에는 c == 3 이 아니라, (unsigned char)c == '3' 으로 ...
추가
--------
생각해보니 asteroid 님 말씀처럼 byte-order 문제도 있겠군요.
파일에 쓰거나 읽을 때는,
처럼 해주는 게 좋을 것 같네요.
댓글 달기