郑州正云网站建设,如何做免费的网站推广,360优化大师最新版,莞城最新通告fork和vfork是用于创建新进程的函数#xff0c;在Linux的C语言编程中非常常见。
fork函数
fork函数是用于创建一个新的进程#xff0c;新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后#xff0c;父进程和子进程将并发执行。 …fork和vfork是用于创建新进程的函数在Linux的C语言编程中非常常见。
fork函数
fork函数是用于创建一个新的进程新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后父进程和子进程将并发执行。
fork后会有两个并发程序执行子进程复制了父进程的数据段包括全局变量
fork函数原型
pid_t fork(void);fork函数返回值为
如果是在父进程中返回新创建的子进程的进程ID如果是在子进程中返回0若出现错误返回-1。
#include stdio.h
#include sys/types.h
#include unistd.h
/*** fork后会有两个并发程序执行* 子进程复制了父进程的数据段包括全局变量
*/
int main() {pid_t val;printf(PID before fork(): %d\n,getpid());val fork();// *********************************************************************if(val 0) {printf(I am the child process, PID is %d\n, getpid());} else if(val 0) {printf(I am parent process, PID is %d\n, getpid());} else {printf(Error);}
}从fork语句后开始父进程和子进程。 vfork函数
vfork函数是Linux和Unix系统中用于创建新进程的另一个函数与fork函数类似但行为有所不同。vfork创建的新进程与调用进程共享地址空间这样可以减少内存的使用。然而需要注意的是在子进程调用exec或exit之前父进程会被阻塞。
vfork创建的子进程与父进程共享地址空间调用vfork创建子进程后父进程会被挂起直到子进程结束
#include stdio.h
#include sys/types.h
#include unistd.h
/*** vfork创建的子进程与父进程共享地址空间* 调用vfork创建子进程后父进程被挂起直到子进程结束。
*/
int A 0;
int B 0;
int main()
{pid_t val;val vfork();if(val 0) {A, B;printf(A: %d , B: %d\n, A, B);} else {A, B;printf(A: %d , B: %d\n, A, B);}}如果将vfork换为fork
#include stdio.h
#include sys/types.h
#include unistd.h
int A 0;
int B 0;
int main()
{pid_t val;val fork();if(val 0) {A, B;printf(A: %d , B: %d\n, A, B);} else {A, B;printf(A: %d , B: %d\n, A, B);}}可以发现vfork创建的子进程与父进程共享地址空间。