关联课程:https://blog.csdn.net/search_129_hr/category_11784317.html
本次作业采用c语言于Linux环境下使用老师提供的代码完成,参考代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (){
pid_t tempPid;
int i;
for (i=0;i<2;i++){
if ((tempPid=fork())==0){
break;
}
}
if (tempPid==-1){
perror("fork error");
}
else if (tempPid>0){
sleep(2);
printf("parent process,pid=%d,ppid=%d\n",getpid(),getppid());
}
else{
sleep(i);
printf("I am child process=%d,pid=%d,ppid=%d\n",i+1,getpid(),getppid());
}
printf("..........finish..........\n");
return 0;
}
首先分析代码;
本次作业所需实现的功能有:
创建一个进程及其子进程;
使优先级相同的各进程按序输出自己的pid,创建次序及父进程pid。
在具体设计中,本代码运用到了fork()函数创建进程。此函数会在被调用时创建一个新进程,此进程作为当前正在执行进程的子进程独立运行。返回值方面,调用后执行成功时此函数返回一个int型数据,若由父进程调用,则返回所创建子进程的pid;若由子进程调用则会返回0;若是调用失败,此函数会返回-1。
在实际运行中,代码首先于第一个循环中创建当前进程的子进程,并将fork()函数的返回值赋予局部变量tempPid,同时循环中存在判断机制,当返回值为0时,代表当前进程是一个后创建的子进程,此时执行break跳出循环,避免为子进程创建额外的子进程。
在此之后代码进入另一个选择结构,在此结构中,代码通过tempPid判断当前的进程是子进程还是父进程,同时排除创建出错发生的报错。如果当前进程是第i个子进程,则通过sleep函数使其暂停i秒,以此实现对优先级相同进程的排序;如果当前进程是父进程,则直接在等待最长的时间后输出自己 的pid及父进程的pid。
以下是实验过程:
首先创建代码文件:
编译及运行:
总结:
在本次课程中,我学习了c语言中进程的创建与管理相关的内容。经过数次课程的学习,我对Linux系统的运用也已经从开始的手忙脚乱,四处碰壁转变为现在可以较为熟练的编译纠错并执行所需的代码。相信在日后的学习中我能学到更多更丰富的知识。