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;
    }
  • 相关阅读:
    C#基础知识(以宝马,车,车轮为例)
    JAVA之本地图片复制
    JAVA获取PC每个盘符,获取每个盘符总大小,剩余空间大小
    Extjs window autoload
    jquery入门(一)
    extjs 鼠标滑过grid时产生提示grid列中的值
    poi导出
    Extjs 报表同值合并方法
    强大的grep命令
    job
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12409998.html
Copyright © 2011-2022 走看看