1. 学习和了解进程控制的基本和常用的系统调用 fork wait sleep exit exec 等等。

  2. 查看 /usr/src/include/sched.h中的task_struct 数据结构,并分析Linux 操作系统进程状态。

  3. 通过进程创建的应用实例,深刻理解进程创建的过程。

程序例题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); 
}