Linux进程控制-创建进程/进程共享
- 创建子进程
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("*****************\n");
/*******************************************************
*函数:fork()
*头文件:#include <unistd.h>
*格式:pid_t fork(void);//创建的子进程会从fork()函数向下执行,父进程fork()之前的函数,子进程也有,但不执行.此时子父进称共同抢占cpu的执行权限.
*作用:创建子进程
*返回值:两个返回值,一个是父进程返回的子进程的pid值,若父进程返回-1表示子进程创建失败;另一个是子进程返回的0,表示子进程创建成功
********************************************************/
/*******************************************************
*函数:getpid()
*头文件:#include <unistd.h> #include <sys/types.h>
*格式:pid_t getpid(void);//获取当前进程的ID;
* pid_t getppid(void);//获取当前进程的父进程的ID;
*返回值:对应进程的ID值
********************************************************/
//创建多个子进程,注意:不能子进程产生子进程.
int pid;
int i;
for( i=0;i<5;i++)
{
pid=(int)fork();
if(pid==-1)
{
perror("fork error:");
exit(1);//#include<stdlib.h>
}
//防止子进程产生子进程.
if(pid==0)
{
break;
}
}
//子进程干子进程的事
if(i<5)
{
printf("##########\n");
return 0;
printf("%dth进程的ID为%d\n",i+1,getpid());
}
//一个父进程产生多个子进程.没有5个父进程.
else{
sleep(1);//这里不加sleep(),会造成子进程,父进程,shell进程随机抢占cpu,造成下面图片的运行结果.
printf("父进程的ID为%d\n",i,getppid());
}
if(i=5&&pid>0)
printf("****************\n");
return 0;
}
- 进程共享
1>父子进程遵循:读时共享(公用),写时复制的原则(各用个的).
2>父子进程间共享:文件描述符(fd);mmap建立的映射区