内容发布更新时间 : 2025/11/4 22:53:03星期一 下面是文章的全部内容请认真阅读。
五.总结
1.实验过程中遇到的问题及解决办法;
答:刚开始不会用fork 和 Kill 函数,通过上网查资料得以解决。
2.对设计及调试过程的心得体会。
答:有时候子进程跑的比父进程快,结果有些混乱。
六.附录:源代码(电子版)
#include 
/* 允许建立的子进程个数最大值 */ #define MAX_CHILD_NUMBER 10 /* 子进程睡眠时间 */
#define SLEEP_INTERVAL 2
int proc_number=0; /* 子进程的自编号,从0开始 */ void do_something();
/* 存放每个子进程的id */
int main(int argc, char* argv[]) {
/* 子进程个数 */
int child_proc_number = MAX_CHILD_NUMBER; int i, ch;
pid_t child_pid = 0; pid_t pid[10]={0};
pid_t fpid=getpid();//获取父进程编号
printf(\ if (argc > 1) /* 命令行参数第一个参数表示子进程个数*/ {
child_proc_number = atoi(argv[1]);
child_proc_number= (child_proc_number > 10) ? 10 : child_proc_number; }
    for (i=0; i         /* 填写代码,建立child_proc_number个子进程要执行  *          * proc_number = i;   *                   * do_something();   *                            * 父进程把子进程的id保存到pid[i] */         if(!(child_pid=fork())||child_pid<0) {             pid[i]=getpid();             proc_number = i+1;             do_something();             break;         }else              pid[i]=child_pid;              }      /* 让用户选择杀死进程,数字表示杀死该进程,q退出 */     while ((ch = getchar()) != 'q')      {         if (isdigit(ch))  {              /*  填写代码,向pid[ch-'0']发信号SIGTERM,杀死该子进程 */             if(pid[ch-'0']!=0){                  kill(pid[ch-'0'], SIGTERM);            }         }          printf(\        getchar();     }      // 在这里填写代码,杀死本组的所有进程 */     //在父进程中杀死所有进程             if(fpid!=0){                kill(-fpid, SIGTERM);               }                                           return 0;   }   void do_something()  {                                                     for(;;)  {                 printf(\is process No.%d and is %d\\n\              sleep(SLEEP_INTERVAL); /* 主动阻塞两秒钟 */              }        }   its pid