2017-10-24 6 views
0

저는 C에서 간단한 트리 구조를 만들어야했습니다. 기본적으로 main 프로세스는 fork()를 사용하여 하위 프로세스를 생성 한 다음 종료합니다. 자식 프로세스는 메시지를 출력하고 자체 자식 프로세스를 생성하며 종료합니다.이 절차는 3 번 반복됩니다. 음, 분명히 그것은 어딘가에 실행중인 어딘가에 이상한 결과를 출력합니다 (실행 파일이있는 디렉토리를 출력합니다). 나는 터미널에서 코드와 출력을 공유하고있다.간단한 트리 프로세스를 만들 때 이상한 결과가 출력됩니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 


int main(){ 
    int i; 
    pid_t cpid[3]; 
    printf("¡Hola, soy el proceso padre!\n"); 
    for (i=0;i<3; i++){ 
     cpid[i] = fork(); 
     if (cpid[i] == 0){ 
      printf("¡Hola, soy el proceso hijo N°%i!\n",i+1); 
     }else{ 
      printf ("Terminando proceso %i....\n",i); 
      exit (EXIT_SUCCESS); 
     } 
    } 
    printf ("Terminando proceso %i....\n",i); 
    return 0; 
} 

그리고이 내 출력 : (출력 메시지는 스페인어로 그것에 대해, 죄송합니다)

[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ gcc -o foo ejercicio23.c 
[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ./foo 
¡Hola, soy el proceso padre! 
Terminando proceso 0.... 
[email protected]:~/Escritorio/Práctica #1 - Solución/Ejercicios programados$ ¡Hola, soy el proceso hijo N°1! <---- WEIRD OUTPUT 
Terminando proceso 1.... 
¡Hola, soy el proceso hijo N°2! 

나는 그것이 실행 파일의 중간에있는 디렉토리를 보여주는 왜 모른다 실행, 이유의 어떤 생각?

감사합니다. :-)

답변

1

자녀 과정이 끝나기를 기다리지 않고 있습니다.

첫 번째 프로세스를 실행하고 새로운 프로세스를 시작하고 종료하십시오. 을 종료하면 프롬프트가 다시 나타납니다 (현재 작업 디렉토리가 포함됨). 그런 다음 무작위로 시작한 다른 프로세스가 실행되어 인쇄하고 종료 할 수 있습니다.

+0

주 프로세스를 끝내기 때문에 프롬프트로 돌아가고 자식 프로세스가 종료 된 후에도 여전히 프로세스가 종료되었음을 알게되었습니다. 감사! –

+0

@FrankPonte Right. 부모 프로세스가 종료되기 때문에 특별한 조치가 필요하지 않습니다. 보조 노트로 공백없이 짧은 경로를 사용하면 더 쉽게 시간을 가질 수 있습니다. ("Práctica # 1 - Solución"은 "Práctica-1-Solución"일 수 있습니다). – cnicutar

+0

나는 그것을 염두에 두겠다. 고마워! –