사용자에게 실행 횟수를 묻는 Collatz 구조를 만들려고합니다. 그런 다음 매번 3 씩 증가하는 코드를 반복합니다 (n = n + 3). 코드가 부분적으로 작동하는 동안 완료된 이전 프로세스가 계속 반복됩니다. 입력이 5이고 프로세스를 "Child 1 = 5, 16, 8, 4, 2, 1"및 "Child 2 = 8,4,2,1"및 "Child 3 = 11,34,17 , 52,26,13, 등. "
문제는 반복 횟수가 너무 많아서 각 하위를 여러 번 실행하는 것입니다. 한 번 정확하고 두 번째로 실행하면 "1"에서 시퀀스가 시작됩니다.
저는 이것을 Linux Debian에서 실행하고 있습니다. 컴파일하려면 "gcc -o filename filename.c"를 사용하고 실행하려면 "./filename 5"를 사용하십시오. 여기서 5는 Collatz 구조의 "n"에 전달 된 번호입니다. 그런 다음 루프를 실행할 횟수를 묻습니다.
나는 아마 벗어났다는 것을 이해하지만, 나는 완전히 잃어 버렸고 어떤 도움을 주시면 감사하겠습니다. 그것은, 당신은 그냥 이상의 프로세스를 산란 부모의 메인 루프를 계속시키는 것 완료되면 당신은 자식 프로세스를 종료하지 않는 것처럼Collatz 구조 루프
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t pid;
int n, j, x;
printf ("How many times would you like this to run?\n");
scanf ("%d",&j);
if (argc == 1) {
fprintf (stderr,"Usage: ./a.out <starting value>\n");
return -1;
}
printf("\nMain program's process ID: %d\n",getpid());
n = atoi(argv[1]);
for (x=1; x <= j; x++){
pid = fork();
if (pid < 0) {
fprintf(stderr, "Unable to fork child\n");
return -1;
}
else if (pid == 0) { /*child process */
printf("\nChild %d (ID: %d)\n",x,getpid());
printf("\nStart sequence at: %d\n",n);
while (n != 1) {
n = n % 2 ? 3 * n + 1 : n/2;
printf("\n(Child %d) %d ",x,n);
}
printf("\n\nAbout to end execution (I'm process %d) .\n",getpid());
}
else { /* parent process */
wait(NULL);
n = n + 3;
}
}
return 0;
}
아, 훨씬 더 의미가 있습니다. 내가 변수와 코드의 일부를 잘못된 섹션에 넣고 있지만이를 수정하는 방법을 알 수는 없다는 것을 알고있었습니다. 무수한 시간과 며칠을 보내십시오. 너는 나를 확실히 구했다. 그 여분의 팁뿐만 아니라, 훌륭한 정보를 주셔서 감사합니다! 고맙습니다! – asyncle