如何终止子进程和父进程?

时间:2017-10-22 14:12:51

标签: c linux

以下代码创建子进程。这个子进程写道 1.000.000随机整数到文本文件然后它应该终止。

#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <time.h>
#include<signal.h>
#include <unistd.h>
#include<sys/wait.h>

int main(int argc, char *argv[]) {

srand(time(NULL));
int list[1000000];
int number;
int evencount=0;
int oddcount=0;
int status=0;

     FILE *fp;

     if((fp= fopen("numbers.txt", "w"))==NULL){

        printf ("File cannot open!\n");

     }

pid_t child_a,child_b;
child_a=fork();

     if(child_a==0){

          printf("\nChild process ID: %d ",getpid());
          /* childA Code */
          for(int i=0; i<1000000;i++) {

                 list[i]=rand();
                 fprintf (fp,"%d ", list[i]);

          }

        kill(child_a,SIGKILL);
        printf("\nWrote 1000000 integers to numbers.txt, terminating.");

      } 

父进程应等待此子进程终止,然后创建另一个子进程。这个新的子进程计算文本文件中有多少个数是偶数,有多少是奇数,它应该被终止。另外,父进程应该显示两个子进程的进程ID,并且只有在它们都被终止后终止。

else {

             child_b=fork();
             if(child_b==0){

                 /* ChildB Code */
                 printf("\nChild process ID: %d ",getpid());
                 while(list[1000000]=getw(fp)!=EOF){
                    for(int j=0;j<1000000;j++){
                      if(list[j]%2==0)
                          evencount++;
                      else
                          oddcount++;
                    }
                 }
                 printf("\nEven Numbers: %d",evencount);
                 printf("\nOdd Numbers: %d",oddcount);

                 kill(child_b,SIGKILL);
                 printf("Terminating..");

              }else{

                   /* Parent Code */
                   int parent;
                   parent=getppid();
                   child_a=wait(&status);
                   printf("\nChild process ID: %d ",child_a);
                   child_b=wait(&status);
                   printf("\nChild process ID: %d\n",child_b);

                   kill(parent,SIGKILL);
                }


           }





}

当我执行这段代码时,输​​出给了我'kill'。那么这段代码中有什么问题可以解决终止处理问题?

0 个答案:

没有答案