进程控制
一、环境变量
通过extern char** environ打印环境变量信息
#include<stdio.h>
extern char ** environ;
int main()
{
int i;
for(i=0;environ[i];i++)
{
printf("_%s_\n",environ[i]);
}
return 0;
}
二、fork函数


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

2.循环创建子进程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
int i;
pid_t pid; //接收进程返回值
printf("程序开始运行……\n");
// 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\n",i+1);
}
else
{
sleep(i);
printf("I am parent\n");
}
return 0;
}

三、 gdb调试

四、exec函数族

1.execlp


2.execl


3.execv

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

五、孤儿进程



六、僵尸进程

七、wait函数


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

1.正常结束

2.异常退出

八、waitpid函数

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

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

2.回收所有进程


浙公网安备 33010602011771号