进程创建实验报告 - 图文 下载本文

五.总结

1.实验过程中遇到的问题及解决办法;

答:刚开始不会用fork 和 Kill 函数,通过上网查资料得以解决。

2.对设计及调试过程的心得体会。

答:有时候子进程跑的比父进程快,结果有些混乱。

六.附录:源代码(电子版)

#include #include #include #include #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