进程状态
进程因为创建或时间片轮转(抢断)而就绪,因为调度而运行,因为i/o操作过长而等待。
linux内核态实现
linux创建0号进程用来调度其他进程
通常调度第一个1号进程(用户进程)
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
int main(void)
{
pid_t pid;
//signal(SIGCHLD,SIG_IGN);
printf("befor fork pid:%d \n",getpid());
pid = fork();
if(pid == -1)
{
printf("pid<0 err.\n");
return -1;
}
else if(pid == 0)
{
printf("child:%d,parent:%d\n",getpid(),getpid());
}
printf("fork after...\n");
return 0;
}
操作系统fork大家可以看我前面的博客,这个章节以实践为主
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
int main(void)
{
pid_t pid;
signal(SIGCHLD,SIG_IGN);
printf("befor fork pid:%d \n",getpid());
int a = 10;
pid = fork();
if(pid == -1)
{
printf("pid<0 err.\n");
return -1;
}
else if(pid == 0)
{
a++;
printf("child:%d,parent:%d\n",getpid(),getppid());
printf("child a:%d\n",a);
}
else if(pid > 0){
a++;
a++;
printf("parent:%d\n",getpid());
printf("parent a:%d\n",a);
sleep(1);
}
printf("fork after...\n");
return 0;
}
这里可以看到stack并不共享,每个并发的进程都有自己的stack