五.总结
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