孤儿进程:
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
int main() //孤儿进程
{
pid_t pid = fork();
assert(pid >= 0);
if(pid == 0){
while(1); //子进程还在运行,父进程退出
}else{
exit(1);
}
}
僵尸进程:
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
int main() //僵尸进程
{
pid_t pid = fork();
assert(pid >= 0);
if(pid == 0){
exit(1); //子进程退出,父进程循环执行,但始终不回收子进程
}else{
while(1);
}
return 0;
}
守护进程(精灵进程):
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <string.h>
int main() //守护进程
{
int num;
pid_t pid = fork();
assert(pid >= 0);
//1.创建子进程,关闭父进程
if(pid == 0){
setsid(); //2.创建一个会话
chdir("/");//3.改变当前工作目录
umask(0002);//4.重设文件掩码
close(0);//5.关闭文件描述符
close(1);
close(2);
while (1)
{
//实现守护进程的功能
}
}else if(pid > 0){
exit(1);
}
return 0;
}