网站服务器 维护,网页主要由三部分组成,wordpress母婴主题,国外网站有哪些推荐的fork后父子进程共享资源 Unix环境高级编程中8.3节中说#xff0c;“子进程是父进程的副本。例如#xff0c;子进程获得父进程数据空间、堆和栈的副本。注意#xff0c;这是子进程所拥有的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。” 书中还… fork后父子进程共享资源 Unix环境高级编程中8.3节中说“子进程是父进程的副本。例如子进程获得父进程数据空间、堆和栈的副本。注意这是子进程所拥有的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。” 书中还预留了例子说明子进程对变量所做的改变并不影响父进程中该变量的值。 /*** fork.c* 探讨父子进程共享变量问题**/#include stdio.h
#include unistd.h
#include stdlib.hint globvar 6; /* external variable in initialized data */
char buf[] a write to stdout\n;int
main(void)
{int var; /* automatic variable on the stach */pid_t pid;var 88;if (write(STDOUT_FILENO, buf, sizeof(buf)-1) ! sizeof(buf)-1){perror(write error);exit(1);}printf(before fork\n); /* we dont flush stdout */if ((pid fork()) 0){perror(fork error);exit(1);} else if (pid 0) { /* child */globvar; /* modify variables */var;} else {sleep(2); /* parent */}printf(pid %ld, glob %d, var %d\n, (long)getpid(), globvar, var);exit(0);
}/myblog/source/fork# gcc fork.c -o fork
/myblog/source/fork# ./fork
a write to stdout
before fork
pid 12071, glob 7, var 89
pid 12070, glob 6, var 88编译和运行程序如如上可以看出fork后子进程只是获得了父进程的副本所有变量的变更都只在各自进程中有效。 实际上fork后子进程和父进程共享的资源还包括
打开的文件实际用户ID、实际组ID、有效用户ID、有效组ID添加组ID进程组ID会话期ID控制终端设置-用户-ID标志和设置-组-ID标志当前工作目录根目录文件方式创建屏蔽字信号屏蔽和排列对任一打开文件描述符的在执行时关闭标志环境连接的共享存储段共享内存资源限制 父子进程之间的区别是
fork的返回值进程ID不同的父进程ID子进程的tms_utimetms_stimetms-cutime以及tms_ustime设置为0父进程设置的锁子进程不继承子进程的未决告警被清除子进程的未决信号集设置为空集