摘要: 当创建一个子进程后,该进程会进入就绪状态,再根据系统的调度,获得时间片,就进入运行状态,在运行状态的进程调用return等进程就结束了;如果在运行状态的进程调用read、write等带阻塞的函数,进程就会进入挂起状态。 阅读全文
posted @ 2023-02-19 22:13 踏浪而来的人 阅读(17) 评论(0) 推荐(0) 编辑
摘要: exec函数是为了在子进程中执行其他的可执行程序(代码替换) 子进程调用exec函数并不创建新的进程,所以前后进程的ID不会改变,exec函数只是用另一个新程序代替当前进程的正文、数据、堆、栈,exec函数结束后(成功就不返回了,失败会返回-1),exec函数后的代码不会执行 l(list):参数列 阅读全文
posted @ 2023-02-19 22:06 踏浪而来的人 阅读(33) 评论(0) 推荐(0) 编辑
摘要: wait()函数:以阻塞的方式等待子进程退出,防止僵尸进程的产生 头文件: #include <sys/types.h> #include <sys/wait.h> pid_t waitpid(pid_t pid, int *wstatus, int options); 原型: pid_t wait 阅读全文
posted @ 2023-02-19 18:01 踏浪而来的人 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 守护进程: 孤儿进程: 僵尸进程: 阅读全文
posted @ 2023-02-19 17:16 踏浪而来的人 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 进程链#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { pid_t pid; int i; //printf("pid = %d\n",getpid()); for(i = 0; i< 5;i 阅读全文
posted @ 2023-02-19 16:49 踏浪而来的人 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 操作文件内核中的结构变化: 在创建一个子进程时,子进程也会有一个进程表项,子进程进程表项中的文件描述符表是复制的父进程的。 阅读全文
posted @ 2023-02-19 16:02 踏浪而来的人 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 在fork之前的printf和write函数只会父进程调用一次,子进程不会调用,因为那时子进程还没有创建出来。当fork时,子进程被创建,程序只会往下顺序执行,但是前面父进程分配的数据段、堆、栈(如红框)会被复制一份到子进程 输出如下: 阅读全文
posted @ 2023-02-19 15:39 踏浪而来的人 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 1. 主进程在fork出一个子进程后,会将自己4G的空间复制一份给子进程(包括代码段、数据段、堆、栈),代码段共享同一物理内存,因为子进程中的代码和父进程中的代码是一样的,只是对pid有一个判断,才会走不同的分支; 输出: 红框中的代码在父进程和子进程都有一份,他们是一样的,只是他们通过判断是父进程 阅读全文
posted @ 2023-02-19 10:51 踏浪而来的人 阅读(171) 评论(0) 推荐(0) 编辑