进程控制

一、环境变量

通过extern char** environ打印环境变量信息

#include<stdio.h>
extern char ** environ;
int main()
{
        int i;
        for(i=0;environ[i];i++)
        {
                printf("_%s_
",environ[i]);
        }
        return 0;
}

  

 二、fork函数

1.创建单个子进程。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
        pid_t pid; //接收进程返回值
        printf("程序开始运行……
");
//      sleep(1);
pid=fork();
        if(pid==-1)
        {
                perror("for error:");
                exit(1);
        }
        else if(pid ==0)
        {
                printf("I am child,pid = %u,ppid = %u
",getpid(),getppid());
        }
        else
        {
                printf("I am Parent,pid = %u,childid =%u,ppid= %u
",getpid(),pid,getppid());
                sleep(1);
        }


        printf("结束
");
        return 0;
}

2.循环创建子进程

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
        int i;
        pid_t pid; //接收进程返回值
        printf("程序开始运行……
");
        //      sleep(1);
        for(i=0;i<5;i++)
        {
                pid=fork();
                if(pid==-1)
                {
                        perror("for error:");
                        exit(1);
                }
                else if(pid ==0)
                {
                        break;
                }
                else
                {
                }
        }
        if(i<5)
        {       sleep(i);
                printf("I am child %d
",i+1);
        }
        else
        {
                sleep(i);
                printf("I am parent
");
        }
        return 0;
}

 

三、 gdb调试

 四、exec函数族

1.execlp

2.execl 

3.execv

 

通过dup2将进程信息写入文件

五、孤儿进程

六、僵尸进程

七、wait函数

 

wait只能回收一个子进程,回收多个子进程需要用循环

1.正常结束

 

2.异常退出

八、waitpid函数

 

 1.回收指定进程(阻塞)

2.回收所有进程,非阻塞,未回收时wpid=0

2.回收所有进程

原文地址:https://www.cnblogs.com/sclu/p/11247533.html