zoukankan      html  css  js  c++  java
  • C++ 进程相关

    PCB 进程控制块

    getenv 获取环境变量

     

     

     父进程先死,子进程变为孤儿。

     加sleep,让父进程最后死。

    查看进程信息:

    ps aux

    有ppid信息:

    ps ajx

    杀死进程:

    kill -9 pid

    kill表示给进程发信号,-9表示发9号信号

    kill -l 查看信号信息

    生5个子进程

    精确控制失去几号子进程

    父子进程间遵循读时共享,写时复制的原则,节省内存开销。

    即使是全局变量,也不是共享的,读时共享,写时就复制了。

     

    execl execlp

     底层把代码段替换了。进程ID不变。换核不换壳。

     

    execl 需要加路径

     孤儿进程

     

    僵尸

     

     

    子进程已经死了,但是没有被回收,所以称为僵尸进程。

    解决:杀死父进程,init会领养它,并负责回收它。

    wait 函数

     

     

     

     

     (没有回收到子进程,waitpid直接return了)

     (可以回收到)

     

    回收n个子进程


    用waitpid实现

    #include <stdio.h>
    #include <unistd.h> 
    #include <sys/types.h>
    #include <sys/wait.h>
    
    int main()
    {
        int i=0;
        pid_t pid;
        for(i=0;i<5;i++){
            pid=fork();
            if(pid==0){
                break;
            }
        }
    
        if(i==5){
            printf("I am the father
    ");
            while(1){
                pid_t wpid=waitpid(-1,NULL,WNOHANG);
                if(wpid==-1){
                    break;
                }else if(wpid>0){
                    printf("recycle wpid=%d
    ", wpid);
                }
            }
            while(1){
                sleep(1);
            }
        }
        else if(i<5){
            sleep(i);
            printf("I am the child, i=%d, pid=%d
    ", i, getpid());
        }
        return 0;
    }
  • 相关阅读:
    世界疫情可视化开发(一)
    世界疫情可视化开发(三)-- world.jsp
    团队冲刺5
    课下作业1-扩展阅读
    团队冲刺4
    团队冲刺3
    冲刺个人感想
    团队冲刺开始
    Android Studio Toast(吐司)的基本使用
    GridLayout(网格布局)
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12409998.html
Copyright © 2011-2022 走看看