孤儿进程
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
//孤儿进程:父进程退出,子进程不退出
if (0 == fork())
{
while(1)
{
printf("子进程:%d %d\n", getppid(), getpid());
sleep(1);
}
}
return 0;
}
僵尸进程
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
//僵尸进程:父进程不退出,子进程退出
//父进程不回收子进程的资源
pid_t pid = fork();
if (pid > 0)
{
while(1)
{
printf("父进程:%d %d\n", getpid(), pid);
sleep(1);
}
}
return 0;
}
守护进程:
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
//守护进程:脱离终端且运行在后台的孤儿进程
//孤儿进程:父进程退出,子进程不退出
if (0 == fork())
{
//创建新的会话组,进程组。让子进程完全独立
pid_t sid = setsid();
printf("sid = %d]\n", sid);
//修改目录为不可卸载的文件
chdir("/home");
//关闭所有的文件描述符
for(int i=0; i<getdtablesize(); i++)
{
close(1);
}
while(1)
{
//功能代码
sleep(1);
}
}
return 0;
}