当前位置:首页 > 学习资源 > 讲师博文 > Linux中的特殊进程

Linux中的特殊进程 时间:2023-09-07      来源:未知

1.孤儿进程

父进程退出,子进程不退出,此时子进程被1号(init)进程收养,变成孤儿进程。

孤儿进程会脱离终端控制,且运行在后端,不能用ctrl+c杀死后端进程,但是可以被kill -9杀死

#include <stdio.h> 

#include <sys/types.h> 

#include <unistd.h> 

int main(int argc, const char *argv[]) { 

//父进程退出 子进程不退出 

pid_t cpid = fork(); 

if(cpid > 0) { 

else if(0 == cpid) {

while(1) { 

printf("this is child %d %d\n", getppid(), getpid()); sleep(1); 

else { 

perror("fork"); return -1; 

return 0; 

2.僵尸进程

子进程退出,父进程不退出去,且父进程没有给子进程收尸,此时子进程就变成僵尸进程。

注意:

僵尸进程只能被回收,不能被杀死。

僵尸进程有危害:占用进程号,占用部分内存空间,占用物理空间,占用进程调度块(PCB)等等... 

回收僵尸进程的方式:

退出父进程后,子进程的资源由内核自动回收。

wait / waitpid函数回收。缺点:阻塞函数,父进程无法做自己的事情。非阻塞形式,有可能收不到。

结合信号的方式回收僵尸进程:当子进程退出后,通知父进程收尸。

 

#include <stdio.h> 

#include <sys/types.h> 

#include <unistd.h> 

int main(int argc, const char *argv[]) { 

//子进程退出,父进程不退出 

pid_t cpid = fork(); 

if(0 == cpid) { 

else if(cpid > 0) { 

while(1) 

printf("this is parent %d %d\n", getpid(), cpid); 

sleep(1); 

else { 

perror("fork"); return -1; 

return 0; 

3.守护进程

又称之为幽灵进程。

它们通常在系统引导时启动,并在没有用户交互的情况下运行,用于处理各种系统任务,如发送电子邮件、调度作业、网络连接等。

守护进程脱离于终端,且运行在后端。

守护进程在执行过程中不会将信息显示在任何终端上,避免影响前端任务执行。且不会被任何终端产生的终端信息所打断。

守护进程目的:需要周期性执行某个任务或者周期性等待处理某些事情的时候,为避免影响前端执行或者被前端信息打断的时候,可以使用守护进程。

 

守护进程的创建:

创建孤儿进程:所有工作都在子进程中执行,从形式上脱离终端控制。

fork(), 退出父进程

创建新的会话组:使子进程完全独立出来,防止兄弟进程对其有影响

setsid() 函数

修改当前孤儿进程的运行目录为不可卸载的文件系统:例如根目录,/tmp

防止运行目录被删除后,导致进程崩溃

chdir函数

注意:从当前位置往后,运行在指定的目录下;

重设文件权限掩码:umask(0), 一般清零;

关闭所有文件描述符,从父进程继承过来的文件描述符不会用到,浪费资源。

#include <stdio.h> 

#include <sys/types.h> 

#include <sys/stat.h> 

#include <unistd.h> 

int main(int argc, const char *argv[]) { 

//创建孤儿进程 

pid_t cpid = fork(); 

if(0 == cpid) { 

//创建新的会话 

pid_t sid = setsid(); 

//修改运行目录为不可卸载的文件目录下 

chdir("/"); 

//清空文件权限掩码 

umask(0); 

//关闭所有文件描述符 

for(int i = 0; i<getdtablesize(); i++) 

close(i); 

 

while(1) { 

//守护进程运行的周期性代码 

sleep(1); 

return 0; 

 

上一篇:什么是文件系统?什么是根文件系统?

下一篇:Linux内核内存泄漏怎么办

戳我查看嵌入式每月就业风云榜

点我了解华清远见高校学霸学习秘籍

猜你关心企业是如何评价华清学员的

干货分享
相关新闻
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2024 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部