linux进程线程管理实验报告(4)

时间:2025-07-09

进程线程,死锁实验报告

while((ch=getchar())!='q'){

if(isdigit(ch)){

kill(pid[ch-'0'],SIGTERM);

wait(&pid[ch-'0']);

}

}

kill(0,SIGTERM); /*杀死本组的所有进程 */

return 0;

}

void do_something(){

for(;;){

printf("This is process NO.%*d\n",proc_number+3,proc_number);

sleep(SLEEP_INTERVAL);

}

}

4.2 回答上述实验内容中的问题

1.预期结果:

会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际结果:

与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。随机输出0-9号进程,sleep(SLEEP_INTERVAL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。

分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;

当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。当输入q时循环退出,kill(0,SIGTERM),杀死本组所有进程。程序退出。

3. proc_number这个全局变量在各个子进程里的值相同,因为子进程相互独立,资源互不影响。

4.kill命令在程序中使用了2次:kill(pid[ch-'0'],SIGTERM); kill(0,SIGTERM); 第一次是杀死该进程号pid[ch-‘0’],执行后接下来的结果中不会有该进程号,用另一个终端打开,使用命令ps aux | grep process,因为子进程先于父进程退出,则被杀死的进程为僵死状态,但我加了行代码wait(&pid[ch-'0']),就会使该子进程真正结束。

第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。执行后程序退出,进程结束。

5.进程在main函数中return,或调用exit()函数都可以正常退出。

而使用kill命令则是异常退出。

当然是正常退出比较好,若在子进程退出前使用kill命令杀死其父进程,则系统

linux进程线程管理实验报告(4).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219