学习和了解进程控制的基本和常用的系统调用 fork wait sleep exit exec 等等。
查看 /usr/src/include/sched.h中的task_struct 数据结构,并分析Linux 操作系统进程状态。
通过进程创建的应用实例,深刻理解进程创建的过程。
程序例题1
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h> //实验指导上少了这一个头文件
int main(void)
{
pid_t pid;
int data=5;
if((pid=fork())<0)
{
printf("fork error\n");
exit(0);
}
else if(pid==0)
{
data--;
printf("child\'s data is:%d\n",data);
exit(0);
}
else
{
printf("parent\'s data is:%d\n",data);
}
exit(0);
}
程序例题2
用fork创建一个子进程,由其调用execve启动shell命令ps查看系统当前的进程信息。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h> //实验指导上少了这一个头文件
#include <sys/wait.h> //实验指导上少了这一个头文件
main( )
{
pid_t pid;
char *path="/bin/ps";
char *argv[5]={ "ps","-a","-x",NULL};
printf(“Run ps with execve by child process:\n”);
if((pid=fork( ))<0)
{
printf(“fork error!”);
exit(0);
}
else if (pid==0)
{
if(execve(path,argv,0)<0)
{
printf(“fork error!”);
exit(0);
}
printf(“child is ok!\n”);
exit(0);
}
//wait( );
pid = wait(NULL); //实验指导上 wait 用错了
printf(“it is ok!\n”);
exit(0);
}