Linux【僵尸进程与孤儿进程】

进程状态

Linux下进程状态:
R运行状态:表示进程正在运行中或者在运行队列里
S睡眠状态:也叫作可中断睡眠状态,意味着进程在等待某事件的完成而被挂起
D磁盘休眠状态:也叫做不可中断睡眠状态,在这个状态下的进程通常会等待IO的结束
T停止状态:可以通过发送SIGSTOP信号给进程来停止进程
X死亡状态:这个状态只是一个返回状态
Z僵死状态:当一个进程退出,并且其父进程没有读取到子进程退出的返回值时会产生僵尸进程

进程的状态查看:ps -aux / ps -ef

僵尸进程

僵尸进程就是处于僵死状态的进程

僵尸进程产生原因:子进程先于父进程退出,因为要保存退出原因,操作系统不能释放所有资源,通知父进程退出原因,父进程没有关注到这个通知,导致子进程退出后无法释放资源,处于僵死状态,称为僵尸进程

僵尸进程的危害:因为僵尸进程的资源得不到释放,所以会造成内存泄漏

如何避免产生僵尸进程:进程等待

产生了僵尸进程如何处理:退出父进程,僵尸进程也就跟着退出了

僵尸进程的实现:

  1 #include<stdio.h>                                                                                                
  2 #include<unistd.h>
  3 
  4 int main(){
  5   printf("hello world! pid:%d\n",getpid());
  6   pid_t pid=fork();
  7   if(pid<0){
  8     printf("fork error\n");
  9     return -1;
 10   }
 11   else if(pid==0){
 12     printf("i am child! pid:%d\n",getpid());
 13   }
 14   else{
 15     printf("i am parent! pid:%d\n",getpid());
 16   }
 17   printf("nihao! pid:%d\n",getpid());
 18   while(1){
 19     printf("2333!!!\n");
 20     sleep(10);
 21   }
 22   return 0;
 23 }

此时子进程pid为13767,父进程pid为13766
用kill命令杀死子进程后,子进程并没有直接终止,而是变成了僵死状态,成为了僵尸进程
在这里插入图片描述

孤儿进程

孤儿进程:父进程先于子进程退出,子进程就会成为孤儿进程
特性:运行在后台,父进程变成了1号进程
特殊的孤儿进程:精灵进程/守护进程

使用上面的代码
此时父进程pid为14605,子进程pid为14606,让父进程退出,此时可以看到子进程状态 变为S,运行在后台,其父进程为1.
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值