码迷,mamicode.com
首页 > 系统相关 > 详细

进程控制

时间:2021-02-17 14:48:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!