以下代码创建子进程。这个子进程写道 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'。那么这段代码中有什么问题可以解决终止处理问题?