(1)fork复制进程的过程:
一个现有进程可以用fork()函数通过系统调用创建一个新进程
#include <unistd.h>
pid_t fork(void);
// 返回:若成功则在子进程中返回0,在父进程中返回子进程PID,若出错则返回-1
fork调用仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值-1;
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的PID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
(2)僵死进程的概念:子进程先于父进程结束,父进程没有调用wait()获取子进程的退出码。
僵死进程的处理方法:
子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。
写时拷贝: 写的时候(改变字符串的时候)才会真正的开辟空间拷贝(深拷贝),如果只是对数据的读时,只会对数据进行浅拷贝。(深拷贝:增加了一个指针,并新开辟了一块空间,让指针指向这块新开辟的空间。浅拷贝:增加了一个指针,指向原来已经存在的内存)(浅拷贝&
复制进程fork与替换进程exec
最新推荐文章于 2021-08-16 21:52:22 发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)