进程状态
进程因为创建或时间片轮转(抢断)而就绪,因为调度而运行,因为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