由于MP3播放器的一些基本的功能需要使用进程,而之前对进程的知识浅显,看了两天进程的资料和进程的使用,对进程(process)有了初步的认识理解。
进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。在程序的实现中,进程使用大有裨益。
1.进程的创建函数:fork(),vfork() 前者父子进程执行顺序不定。
2.在子进程下再建立孙子进程 grand_pid=fork();的例子如下
int play(struct song *head)
{
pid_t child_pid,grand_pid;
char songname[30]="/huang/song/";
int len;
strcat(songname,head->name);
len = strlen(songname);
songname[len-1]='\0';
int i=0;
child_pid = fork();
if(child_pid<0)
{
printf("fork1 error\n");
exit(1);
}
else if(child_pid>0)
{
waitpid(child_pid,NULL,WNOHANG);//父进程操作,等待子进程结束返回pid
}
else //子进程
{
for(i;i<30;i++)
{
grand_pid=fork();
if(grand_pid<0)
{
printf("fork2 error\n");
exit(1);
}
else if(grand_pid==0)//孙子进程
{
printf("begin\n");
execl("/111/madplay","madplay",songname,NULL);//execl调用后替换了孙子进程
}
else {waitpid(grand_pid,NULL,WNOHANG);//子进程对孙子的操作,消灭孙子
printf("over\n");head=head->next;sleep(5);}
}
}
return 0;
}
以上是MP3的循环播放的部分内容。主要是孙子进程负责调用execl,父进程控制子进程,子进程控制孙子进程。
wait(pid,NULL);等待进程结束并将进程id值返回出来。
kill(pid,SIGSTOP);通知id为pid的进程stop;
简单的对进程的基本知识进行下描述,即对进程的浅薄的认识。