标签:oid 函数 perror 结构 err parent apt-get 定时 环境
1.fork函数
作用:创建一个子进程
函数原型:pid_t fork();
返回值:
两个返回值,一个是父进程的返回值,其值为子进程的进程id;一个是子进程的返回值,为0代表创建成功,-1代表创建失败。
循环创建n个进程:
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 5 int main() 6 { 7 int i; 8 pid_t pid; 9 for(i=0;i<5;i++){ 10 pid = fork(); 11 if(pid == -1){ 12 perror("fork error"); 13 exit(1); 14 }else if(pid == 0){ 15 break; 16 } 17 } 18 19 if(i<5){ 20 sleep(i); 21 printf("I‘m %d child,pid = %u\n",i+1,getpid()); 22 }else{ 23 sleep(i); 24 printf("I‘m parent\n"); 25 } 26 return 0; 27 }
2.一些相关函数
pid_t getpid(void);
获取当前进程的id
pid_t getppid(void);
获取当前进程的父进程的id
uid_t getuid(void);
获取当前进程实际用户id
uid_t geteuid(void);
获取当前进程有效用户id
例:sudo apt-get install
有效用户为su,而不是当前用户。
gid_t getgid(void);
获取当前进程使用用户组id
gid_t getegid(void);
获取当前进程有效用户组id
3.进程共享
fork之后,父子进程的相同与不同之处如下:
相同处:全局变量(父子不共享)、.data(数据段)、.text(代码段)、栈、堆、环境变量、用户id、宿主目录、进程工作目录、信号处理方式;
不同处:进程id、fork返回值、父进程id、进程运行时间、闹钟(定时器)、未决信号集;
当前父子进程之间遵循读时共享写时复制的原则,这样设计,无论子进程执行父进程的逻辑还是自己的逻辑都能节省内存。
父子进程之间共享:1.文件描述符(打开文件的结构体);2.mmap建立的映射区
4.gdb调试
使用gdb调试的时候,gdb只能跟踪一个进程,可以在fork函数调用之前,通过指令设置gdb跟踪父进程或子进程,默认跟踪父进程。
set follow-fork-mode child 设置跟踪子进程
set follow-fork-mode parent 设置跟踪父进程
注意:在有多个子进程时,可以在相应的子进程处设置(条件)断点。
标签:oid 函数 perror 结构 err parent apt-get 定时 环境
原文地址:https://www.cnblogs.com/czhdbk/p/14402655.html