#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
int main()
{
FILE *fp = fopen("test.txt", "wt"); //저장할 파일 생성.
int i;
int j;
int k;
int status;
time_t rawtime; // 시간 출력
struct tm *timeinfo;
int dead_child_pid;
time(&rawtime);
timeinfo = localtime(&rawtime);
pid_t pid;
pid_t pid_child; // 부모와 자식의 pid확인 및 pid리턴값
pid_t pid_parent;
pid_t a[10];
for(i=0; i<5;i++)
{
pid = fork();
if (pid == -1)
{
fprintf(stderr, "fork failed");
return 1;
}
else if(pid==0)
{
for(j=0;j<5;j++)
{
printf("[%dprocess] #%d\n",getpid(),j);
}
return 0;
}
else
{
/* while((dead_child_pid = waitpid(-1, &status, WNOHANG)) >0)
{
printf("%d [child] 종료. %d [부모]\n", dead_child_pid, getpid());
} 1번
*/
/* while(wait(NULL)!=-1 )
{
printf("%d [child] 종료. %d [부모]\n",wait(NULL),getpid());
} 2번
*/
}
}
return 0;
}
1번으로 while 문하면 전체 실행시간중에 자식이 하나 혹은 둘 정도 죽엇다고 뜸 안뜰때도 잇음
2번으로 하면 자식이 하나 종료되기전까지 다음께 블락되는거같은데..
참 병신같다 내가 참..
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
int main()
{
FILE *fp = fopen("test.txt", "wt"); //저장할 파일 생성.
int i;
int j;
int k;
int status;
time_t rawtime; // 시간 출력
struct tm *timeinfo;
int dead_child_pid;
time(&rawtime);
timeinfo = localtime(&rawtime);
pid_t pid;
pid_t pid_child; // 부모와 자식의 pid확인 및 pid리턴값
pid_t pid_parent;
pid_t a[10];
for(i=0; i<5;i++)
{
pid = fork();
if (pid == -1)
{
fprintf(stderr, "fork failed");
return 1;
}
else if(pid==0)
{
for(j=0;j<5;j++)
{
printf("[%dprocess] #%d\n",getpid(),j);
}
return 0;
}
else
{
/* while((dead_child_pid = waitpid(-1, &status, WNOHANG)) >0)
{
printf("%d [child] 종료. %d [부모]\n", dead_child_pid, getpid());
} 1번
*/
/* while(wait(NULL)!=-1 )
{
printf("%d [child] 종료. %d [부모]\n",wait(NULL),getpid());
} 2번
*/
}
}
return 0;
}
1번으로 while 문하면 전체 실행시간중에 자식이 하나 혹은 둘 정도 죽엇다고 뜸 안뜰때도 잇음
2번으로 하면 자식이 하나 종료되기전까지 다음께 블락되는거같은데..
참 병신같다 내가 참..
교수가 wait(NULL)하면 블록이 되니 어쩌니 햇던거같은데.. 잘 이해가안됨..
http://ideone.com/1EMBBW
내컴에선 잘 되는데 온라인에선 이상하네.
ㅇㅇ횽 정말 나를 위해 고생해줘서 고마운데...
이러면 wait한다구 다음 자식프로세스가 블락되는거같은데.. 이렇게 말구 막 암거나 실행되다가 종료되는놈만 출력은안되는걸까..
http://ideone.com/mf9JV2
2333 #02333 #12334 #02333 #22333 종료2335 #02334 #12335 #12335 #22335 종료2336 #02334 #22334 종료.........
줄넘기기가 안되네;; 암튼 이런식으로하는게 나의 목표인데 wait하면 자꾸 다음 프로세스 블락시키니까 이걸 해결하는법이없나요..
아..
글구 내 컴터 문제인지 뭔 문제인지 모르겟지만 형이 올린걸로 컴파일하면 #0#1#2 종료 #0#1#2 종료 이렇게 뜸..
난 012012012012종료종료종료종료012종료 뜸
http://ideone.com/mf9JV2
이 소스가요?? 아님 다른거중에?? 내 컴파일러가 문제인가..
형 만약 자식프로세서를 배열에 넣고 for 문 다끝나고 while문 만들어서 그안에 배열==wait(null) 일때만 출력하는걸로 해보려고하는데 배열==wait(null) 어케 확인하지..? 인덱스 0~n까지잇는거중에 wait(null)이랑 같은걸 찾고싶은데 이런...
나중꺼.
ㅇㅇ 횽 개빡칠듯..ㅠㅠ 미안해진당.. 1234종료1234종료1234종료 말구.. a1a2b1a3b2a4 a종료 b3c0c1b4 b종료 d0d1c2c3d2c4종료 이게 나의 목표임..
흠 실행순서는 보장할수 없을텐데
순서보장이 아니구. 예를 든거임.. 내말은 프로세스끼리 순서만 엉켜잇는상태에서 하나 종료되면 그때 종료메시지 출력
또 순서엉키면서 출력하다가 다른 프로세스 종료되면 또다시 종료메시지 출력 마지막 프로세스까지 종료될때까지