Linux——进程的概念2

本文详细介绍了如何使用C语言创建进程,通过fork()函数复制父进程并创建子进程,以及如何通过返回值判断进程类型。同时,讲解了如何利用getpid()获取进程ID,以及进程在Linux下的各种状态,如可执行状态、休眠状态等。此外,还深入探讨了僵尸进程的危害和避免方法。

 

 

进程的创建:

 #include <stdio.h>
 #include <unistd.h>
 int main()
  
 {
   printf("%d\n",getpid());//getpid()获取调用进程的ID
   pid_t pid = fork();
   printf("---------------------------\n");
   printf("123\n");
   printf("456\n");
  
   printf("%d\n",pid);
  
   printf("---------------------------\n");
  
   return 0;
 }       

以上述代码为例:

pid_t pid = fork()

pid_t其实就是一个int类型的变量,用来表示进程的ID,fork()返回一个进程ID,这个进程ID赋值给pid

这个语句复制调用进程(父进程),创建了一个新的进程(子进程)

 

父进程在创建子进程成功后,程序计数器走到创建子进程的下一步指令,因此子进程是在fork创建子进程成功后开始调用

fork()的返回值:对于父进程来说:返回的是子进程的ID,是大于0的

                           对于子进程来说:返回的都是0

gitpid()获取调用进程的ID

 

根据fork()的返回值不同,进行判断可以实现父子进程代码分流

 

查看进程信息: ps -ef 或者 ps -aux

进程的状态:

进程的状态有三类:就绪,运行,阻塞

linux下进程的状态:

可执行状态(R):正在运行/只要拿到时间片就可以运行 -----这种进程调度到CPU上进行处理

可中断休眠状态(S):当前处于休眠状态,这种休眠可以被打断

不可中断休眠状态(D):当前处于休眠状态,这种休眠不可以被打断

停止状态(T):什么事都不干

退出状态 -->进程成为僵尸进程(Z):进程已经退出,但是资源没有完全释放是处于的一种状态,等待后续的处理

这里只是简单的介绍一下各种状态,想要详细了解可以在我的博客中查阅 进程的状态

僵尸进程:

  处于退出状态,但是资源没有资源没有完全的释放,等待父进程“收尸”

  危害:资源泄露 :用户能创建的进程是有限的,僵尸进程过多会导致创建新的子进程的失败从而导致不可预估后果!!

              内核资源:内核中的PCB没有被 回收

  产生:给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取。这些信息包括子进程的进程ID、终止状态以及资源利用信息(CPU时间,内存 使用量等等)。如果一个进程终止,而该进程有子进程处于僵尸状态,那么它的所有僵尸子进程的父进程ID将被重置为1(init进程)。继承这些子进程的 init进程将清理它们(init进程将wait它们,从而去除僵尸状态)。

之所以产生僵尸进程是因为子进程先于父进程退出,而父进程没有获取维护子进程的信息,则该子进程就成为僵尸进程。

  避免:父进程一直等待子进程的退出

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值