저는 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!
나는 그것이 실행 파일의 중간에있는 디렉토리를 보여주는 왜 모른다 실행, 이유의 어떤 생각?
감사합니다. :-)
주 프로세스를 끝내기 때문에 프롬프트로 돌아가고 자식 프로세스가 종료 된 후에도 여전히 프로세스가 종료되었음을 알게되었습니다. 감사! –
@FrankPonte Right. 부모 프로세스가 종료되기 때문에 특별한 조치가 필요하지 않습니다. 보조 노트로 공백없이 짧은 경로를 사용하면 더 쉽게 시간을 가질 수 있습니다. ("Práctica # 1 - Solución"은 "Práctica-1-Solución"일 수 있습니다). – cnicutar
나는 그것을 염두에 두겠다. 고마워! –