伊春市网站建设,discuz 做的网站,宁波小型建网站公司,开发公司资质等级目录
一、孤儿进程 二、僵尸进程 三、守护进程#xff08;精灵进程#xff09; 一、孤儿进程 定义#xff1a;孤儿进程是指那些其父进程已经结束#xff0c;但它们依然在运行的进程 创建一个孤儿进程#xff1a; #include stdio.h
#include stdlib.h
#in…目录
一、孤儿进程 二、僵尸进程 三、守护进程精灵进程 一、孤儿进程 定义孤儿进程是指那些其父进程已经结束但它们依然在运行的进程 创建一个孤儿进程 #include stdio.h
#include stdlib.h
#include unistd.h
#include sys/types.hint main() {pid_t pid fork(); // 创建子进程if (pid 0) {// fork失败perror(fork);exit(EXIT_FAILURE);}if (pid 0) {// 子进程printf(Child process: PID%d, PPID%d\n, getpid(), getppid());// 暂停子进程以便父进程有足够时间退出sleep(10);// 父进程退出后子进程成为孤儿进程printf(Child process (orphan): PID%d, PPID%d\n, getpid(), getppid());//父进程退出后查看子进程的父进程id和子进程id} else {// 父进程sleep(1);printf(Parent process: PID%d\n, getpid());//父进程ID// 父进程退出exit(EXIT_SUCCESS);}return 0;
}主要进程标识 进程号PID(process id) 父进程号PPID(parent process id) 进程组号PGID进程组若干个进程的集合称之为进程组默认情况下新创建的进程会进程父进程的进程组ID 会话组号SID会话组若干个进程组的集合称之为会话组默认情况下新创建的进程会继承父进程的会话ID 二、僵尸进程 定义 僵尸进程Zombie Process是指那些已经完成执行但仍然存在于系统中的进程。这些进程已经终止但它们的进程控制块PCB还未被父进程读取和清理。 创建一个僵尸进程 #include stdio.h
#include stdlib.h
#include unistd.h
#include sys/types.h
#include sys/wait.hint main() {pid_t pid fork();if (pid 0) {perror(fork);exit(EXIT_FAILURE);}if (pid 0) {// 子进程printf(Child process: PID%d\n, getpid());// 子进程终止但父进程故意不调用wait()来清理exit(EXIT_SUCCESS);} else {// 父进程printf(Parent process: PID%d\n, getpid());// 父进程故意不调用wait()等待子进程成为僵尸sleep(5); // 让子进程有时间成为僵尸printf(Parent process exiting\n);// 父进程退出exit(EXIT_SUCCESS);}return 0;
}三、守护进程精灵进程 定义守护进程精灵进程Daemon Process是指那些在后台运行的进程通常不与用户直接交互。精灵进程在系统启动时启动持续运行并在系统关闭时退出。它们通常用于提供系统服务或进行系统管理任务。 创建一个精灵进程 1、创建孤儿进程pid fork()
if(pid 0)exit(0);2、创建新的会话组让孤儿进程成为会话组组长
可以让子进程完全独立脱离其他兄弟亲缘进程的控制setsid();//创建新会话当前进程变为会话组组长3、修改进程的工作路径(运行目录)比如家目录根目录
chdir(新路径)4、重设文件权限掩码
umask(0);5、关闭所有的文件描述符:从父进程得到的文件描述符用不到全部关闭
getdtablesize() max 1
for(int i 0;i getdtablesize ;i)close(i); 实现代码 //创建一个守护进程
#includestdio.h
#includestdlib.h
#includeunistd.h
#includewait.h
#includesys/stat.h
#includesys/types.h
#includefcntl.h
int main(int argc, const char *argv[])
{//1、创建一个孤儿进程pid_t pidfork();if(pid0)exit(0);//2、创建一个会话组setsid();//3、修改工作路径chdir(/home/ubuntu/test);//4、重设文件权限掩码umask(0);//5、关闭其他文件描述符包括终端文件for(int i0;igetdtablesize();i)close(i);//守护进程创建成功//用守护进程写入数据进入文件int fd open(1.txt,O_WRONLY|O_TRUNC|O_CREAT,0664);char *phello world;while(1){write(fd,p,10);sleep(1);}close(fd);return 0;
}