您的位置:首页 > 其它

vfork()系统调用-创建子进程,阻塞父进程

2011-04-04 11:47 483 查看
vfork():


The vfork()
function is the same as fork()
except that
it does not make a copy of the address space. The memory is shared
reducing the overhead of spawning a new process with a unique copy of all
the memory.
This is typically used
when using fork()
to exec()
a process and terminate.
The vfork()
function also executes the child process first and
resumes the parent process when the child terminates.

Example:

1 #include<stdio.h>

2 #include<unistd.h>

3 #include<stdlib.h>

4 int globalVariable = 2;

5 int main(){

6 char *sIdentifier;

7 int iStackVariable = 20;

8

9 pid_t pID = vfork();

10

11 if( pID == 0 ) {

12 //Code only executed by child process

13 sIdentifier = "Child Process: ";

14 globalVariable++;

15 iStackVariable++;

16 printf( " %s ", sIdentifier );

17 printf( " Global variable: %d", globalVariable );

18

19 printf( " Stack variable: %d/n", iStackVariable );

20

21 _exit(0);

22

23 } else if ( pID < 0 ) {

24 printf( "Failed to fork!/n" );

25 exit(1);

26 //Throw exception

27 } else {

28 //Code only executed by parent process

29 sIdentifier = "Parent Process: ";

30 }

31

32 //Code executed by parent.

33 printf( " %s ", sIdentifier );

34 printf( " Global variable: %d ", globalVariable );

35 printf( " Stack variable: %d/n", iStackVariable );

36 }

explore@ubuntu:~/Documents/Linux C Programming/Process/vfork$ gcc vfork.c

explore@ubuntu:~/Documents/Linux C Programming/Process/vfork$ ./a.out

Child Process: Global variable: 3 Stack variable: 21

Parent Process: Global variable: 3 Stack variable: 21

Note: The child process executed first, updated the variables which are shared
between the processes and NOT
unique, and then the parent process
executes using variables which the child has updated.

[Potential Pitfall]
: A deadlock condition may occur
if the child process does not terminate, the parent process will not proceed.

Man Pages:

vfork
- create a child process and block parent

_exit
- - terminate the current process
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: