嵌入式技术笔记(十三):多进程的优缺点、wait函数族和僵尸进程

本文探讨了多进程编程的优缺点,特别是其对用户和开发者的影响,以及wait函数族如wait和waitpid的使用,包括它们在处理子进程结束和避免僵尸进程方面的关键作用。还介绍了僵尸进程产生的原因及避免方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 多进程的优缺点
木马病毒:通过侵入用户的内核,获得对进程的调度权
多进程的优缺点:

  • 优点:
    1、对用户来说,操作系统更加健壮(因为一个进程无法破坏另一个进程或操作系统的运行,进程之间相互独立)
    2、对开发者来说,更容易进行内存的读取和写入(因为进程有独立的内存)
  • 缺点:
    1、多任务实现开销大,效率低
    2、编写能够与其他进程通信或能够对其他进程操作的应用程序将要困难的多

2. wait函数族

  • wait函数:将当前进程挂起,等待信号来临,在继续运行;用来等待子进程的结束。
    pid_t wait(int *wstatus);
    WEXITSTATUS(宏定义):是用来返回子进程退出状态

题外话:宏函数(宏定义)
优点:1、执行效率高 2、节省空间
与普通函数的区别:
1、编译效率更高

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main()
{
    int i = 0;
    int status;
    pid_t pid = fork();

    if(-1 == pid)
    {
	    perror("fork error!");
	    exit(1);
    }
    if(0 == pid)
    {
	    printf("child\n");
    }
    else
    {
	    pid = wait(&status); //wait()发生在父进程中,等待子进程结束
	    printf("father\n");
    }
}

运行结果如下:子进程先执行,执行结束后,父进程再执行。
wait()函数的运行截图

  • waitpid:可以指定等待的进程号
    pid_t waitpid(pid_t pid, int *wstatus, int options);
    作用:1、防止资源浪费
    2、有时候不需要很多wait()函数,所以可以用waitpid()来等待指定的进程
    举例说明,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main()
{
    int status;
    pid_t pid = fork();
    if(-1 == pid)
    {
	perror("fork error!\n");
	exit(1);
    }
    if(0 == pid)
    {
	printf("child\n");
	exit(3);
    }
    else
    {
	pid = waitpid(pid, &status, 0);
	printf("father\n%d\n",WEXITSTATUS(status));
    }
}

运行结果如下:
waitpid()函数

  1. 僵尸进程
  • 僵尸进程产生的原因:当进程走完自己的生命周期之后,会执行自己的系统调用exit(9)函数,然后内存被释放,没有执行代码。但是在进程表里面仍留下进程信息(pid,退出信息),直到父进程将他们回收。
    僵尸进程的存在会占用资源,如果占用资源过多,使得进程表满了,会造成操作系统崩溃。所以僵尸进程应该尽量避免!!!
  • 如何避免僵尸进程:wait函数族
    在进程表中黄色字体"1 zombie"说明有1个僵尸进程。
    僵尸进程
    用ps -ef命令后,显示出僵尸进程
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值