标签:不能 sys 多个 退出 lan erro 时间段 返回 常用
初始态,就绪态,运行态,挂起态与终止态
Fork函数
● fork函数代码片段实例
......
pid_t pid = fork();
if(pid<0)
{
perror("fork error");
return -1;
}
else if(pid>0)
{
printf("father: [%d], pid==[%d], fpid==[%d]\n", pid, getpid(),getppid());
//sleep(1);
}
else if(pid==0)
{
printf("child: pid==[%d], fpid==[%d]\n", getpid(), getppid());
}
......
如果想在一个进程内部执行系统命令或者是应用程序, 可以使用execl和execlp函数拉起可执行程序或者命令.
.......
else if(pid==0) //子进程
{
printf("child: pid==[%d], fpid==[%d]\n", getpid(), getppid());
execl("/bin/ls", "ls", "-l", NULL);
execl("./test", "test", "hello", "world", "ni", "hao", NULL);
execlp("ls", "ls", "-l", NULL);
......
当一个进程退出之后,进程能够回收自己的用户区的资源,但是不能回收内核空间的PCB资源,必须由它的父进程调用wait或者waitpid函数完成对子进程的回收,避免造成系统资源的浪费。
孤儿进程是指父进程已死而子进程还活着,此时子进程就是孤儿进程。
孤儿进程会被init进程领养。
若子进程死了,父进程还活着, 并且父进程没有调用wait或waitpid函数回收子进程,此时子进程就成了僵尸进程。
由于僵尸进程已死,不能用kill命令杀死子进程,回收子进程的方法如下:
杀死父进程->僵尸进程被init进程领养->由init回收
#include <sys/wait.h>
pid_t wait(int * statloc);
pid_t waitpid(pid_t pid,int *statloc,int options);
调用wait或waitpid的进程发生的情况如下:
标签:不能 sys 多个 退出 lan erro 时间段 返回 常用
原文地址:https://www.cnblogs.com/cokefentas/p/14876518.html