zoukankan      html  css  js  c++  java
  • 进程

    创建子进程:fork调用,

      一次fork调用返回两个值,1、返回子进程的pid(非负整数)

                    2、返回0

      父进程的fork返回子进程的id,子进程的fork返回0(表示执行成功)

    创建单个子进程:

      

        pid_t pid;
        pid = fork();
        if(pid == -1)
        {
            perror("fork error");
            exir(1);
        }else if(pid == 0)
        {
            printf("I`m child pid = %u
    , ppid = %u
    ", getpid(), getppid());
        }else{
             printf("I`m parent pid = %u
    , ppid = %u
    ", getpid(), getppid());
        }

    循环创建多个子进程

      for(...)

      {

        上述代码...在子进程中加入break

      }

    进程的有效用户与实际用户:当使用sudo后有效用户是root,实际用户是lr

      uid_t getuid(void)  //获取实际用户id 

      uid_t geteuid(void)  //获取有效用户id

    fork之后父子进程相同处:全局变量、.data(各自一份)、 .text、栈、堆、环境变量、用户id、宿主目录、进程工作目录、信号处理方式

      不同处:进程id、fork返回值、进程运行时间、闹钟、未决信号集、各自的父进程id

      全局变量各自独立,不互相影响

      父子进程间遵循读时共享,写时复制的原则。父子进程读共有的数据时、使用同一数据。当有写操作时,复制一份数据各自使用。

    重点:共享文件描述符(打开文件的结构体),可以操作同一个文件

        mmap建立的映射区(通信使用)

    gdb调试  默认跟踪的是父进程。

      set follow-fork-mode child命令设置gdb在fork之后跟踪子进程

      set follow-fork-mode parent 设置跟踪父进程

      要在fork函数调用之前设置

      

    孤儿进程、僵尸进程

      孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。

      僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。

        特别注意,僵尸进程是不能使用kill命令清除掉的。因为kill命令只是用来终止进程的,而僵尸进程已经终止。

  • 相关阅读:
    Linux Kernel 2:用户空间的初始化
    Linux Kernel系列一:开篇和Kernel启动概要
    谢宝友:会说话的Linux内核
    如何给USB移动硬盘格式化分区
    AVR单片机最小系统 基本硬件线路与分析
    Altium Designer 基本封装
    AVR单片机命名规则
    LynxFly科研小四轴横空出世,开源,F4,WIFI --(转)
    四轴自适应控制算法的一些尝试开源我的山猫飞控和梯度在线辨识自适应等算法—(转)
    我的四轴专用PID参数整定方法及原理---超长文慎入(转)
  • 原文地址:https://www.cnblogs.com/lr1402585172/p/10500953.html
Copyright © 2011-2022 走看看