man(2) V
vfork(2)?
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void);
?
功能:創(chuàng)建子進(jìn)程并阻塞父進(jìn)
----------------------------------------------------
1 #include<sys/types.h>
2 #include<unistd.h>
3 #include<stdio.h>
4 int main()
5 {
6 pid_t pid;
7 int cnt = 0;
8 pid = fork();
9 if(pid<0)
10 printf("error in fork!\n");
11 else if(pid == 0)
12 {
13 cnt++;
14 printf("cnt=%d\n",cnt);
15 printf("I am the child process,ID is %d\n",getpid());
16 }
17 else
18 {
19 cnt++;
20 printf("cnt=%d\n",cnt);
21 printf("I am the parent process,ID is %d\n",getpid());
22 }
23 return 0;
24 }
運(yùn)行結(jié)果:
cnt = 1
I am the child process,ID is 14735
cnt = 1
I am the parent process,ID is 14736
證明子進(jìn)程拷貝父進(jìn)程的數(shù)據(jù)段,代碼段
int main()
{
pid_t pid;
int cnt = 0;
pid = vfork();
if(pid<0)
printf("error in fork!\n");
else if(pid == 0)
{
cnt++;
printf("cnt=%d\n",cnt);
printf("I am the child process,ID is %d\n",getpid());
// _exit(0);//注釋這個(gè)就出現(xiàn)段錯(cuò)誤
}
else
{
cnt++;
printf("cnt=%d\n",cnt);
printf("I am the parent process,ID is %d\n",getpid());
}
return 0;
}
1注釋掉exit就段錯(cuò)誤
vfork 保證子進(jìn)程先運(yùn)行,在她調(diào)用exec 或exit 之?
后父進(jìn)程才可能被調(diào)度運(yùn)行。如果在調(diào)用這兩個(gè)函數(shù)之前子進(jìn)程依賴于父進(jìn)程的進(jìn)一步動(dòng)?
作,則會(huì)導(dǎo)致死鎖。?
2不注釋
cnt = 2??子進(jìn)程與父進(jìn)程共享數(shù)據(jù)段.man
------------------------------------------------------------------------
fork與vfork的區(qū)別
1. fork():子進(jìn)程拷貝父進(jìn)程的數(shù)據(jù)段,代碼段. vfork():子進(jìn)程與父進(jìn)程共享數(shù)據(jù)段.
2. fork():父子進(jìn)程的執(zhí)行次序不確定.vfork():保證子進(jìn)程先運(yùn)行,在調(diào)用exec或exit之前與父進(jìn)程數(shù)據(jù)是共享的,在它調(diào)用exec或exit之后父進(jìn)程才可能被調(diào)度運(yùn)行。
3. vfork()保證子進(jìn)程先運(yùn)行,在她調(diào)用exec或exit之后父進(jìn)程才可能被調(diào)度運(yùn)行。如果在調(diào)用這兩個(gè)函數(shù)之前子進(jìn)程依賴于父進(jìn)程的進(jìn)一步動(dòng)作,則會(huì)導(dǎo)致死鎖。
4.當(dāng)需要改變共享數(shù)據(jù)段中變量的值,則拷貝父進(jìn)程。
https://www.cnblogs.com/lovemdx/p/3308057.html
----------------------------------------
vhangup(2)
vm86(2) vm86old(2) vmsplice(2) vserver(2)
轉(zhuǎn)載于:https://www.cnblogs.com/xpylovely/p/11018054.html
總結(jié)
- 上一篇: 模板层(模板语法)
- 下一篇: Linux CentOS下如何确认MyS