`
vearne
  • 浏览: 18910 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于僵尸进程的练习。

 
阅读更多

请参考linux c一站式学习,此节内容 http://learn.akae.cn/media/ch30s03.html#id2867242

可以设置父进程忽略SIGCHLD信号,或者在SIGCHLD信号的处理函数中调用wait函数,即可获取子进程的退出状态,且销毁僵尸进程。

1)调用wait函数

 

#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include <sys/wait.h>
using namespace std;
void sig_deal(int signo){
        cout<<"I'm called"<<signo<<endl;
        int stat;
        wait(&stat);
        cout<<"status = "<<stat<<endl;

}
int main(void)
{
        pid_t pid=fork();
        if(pid<0) {
                cout<<"error"<<endl;
                exit(1);
        }
        if(pid>0) { /* parent */
                signal(SIGCHLD,sig_deal);
                while(1);
        }
        /* child */
        return 1;
}

 2)使用SIG_IGN

#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include <sys/wait.h>
using namespace std;
void sig_deal(int signo){
        cout<<"I'm called"<<signo<<endl;
        int stat;
        wait(&stat);
        cout<<"status = "<<stat<<endl;

}
int main(void)
{
        pid_t pid=fork();
        if(pid<0) {
                cout<<"error"<<endl;
                exit(1);
        }
        if(pid>0) { /* parent */
                signal(SIGCHLD,SIG_IGN);
                while(1);
        }
        /* child */
        return 1;
}
 
分享到:
评论

相关推荐

    进程线程作业

    8. **僵尸进程和孤儿进程**:当父进程退出而子进程还在运行时,子进程成为孤儿进程,通常会被init进程接管。而进程结束但其父进程没有等待(wait)它,该进程就成为僵尸进程,占用系统资源。 通过对以上知识点的...

    Linux程序设计上机指导书3:Linux进程控制.pdf

    4. **僵尸进程与wait、waitpid**:当子进程先于父进程结束时,它会变为僵尸状态,其资源未被释放,等待父进程通过`wait()`或`waitpid()`回收。`wait()`和`waitpid()`允许父进程等待子进程的结束,并获取其退出状态,...

    9. Linux驱动开发-视频广告机开发、Linux进程编程介绍.pdf

    - **僵尸进程**:子进程先退出,如果父进程未调用`wait()`或`waitpid()`回收子进程资源,子进程将成为僵尸状态。 - **孤儿进程**:父进程先退出,子进程会被init进程收养,避免成为孤儿进程的方法是确保父进程最后...

    unix进程管理

    此外,进程还可以经历创建、终止和僵尸状态。创建新进程通常通过`fork()`系统调用实现,而`exec()`系列函数用于加载新的程序到已创建的进程中执行。 **二、进程创建** Unix中的`fork()`函数创建一个与父进程几乎...

    打通Linux脉络系列:进程、线程和调度.pdf

    1.3 僵尸进程 1.4 停止状态与作业控制 1.5 内存泄漏的真实含义 1.6 cpulimit 原理 2. 第二部分大纲 2.1 fork 和 vfork 区别 2.2 写时拷贝技术 2.3 Linux线程的实现本质 2.4 孤儿进程的托孤,SUBREAPER 练习...

    操作系统第二章习题

    进程状态可以分为五种:新生态、就绪态、执行态、挂起态和僵尸态。引起进程状态变化的主要原因包括:创建进程、时间片到期、I/O操作完成、子进程结束、父进程结束、进程阻塞等。 2. 有一个可以存放消息的缓冲池BUF...

    网络程序设计.pdf

    从提供的文件内容来看,该文档主要围绕西安电子科技大学计算机学院的网络应用程序设计课程的期末试题及答案展开,内容涵盖了网络协议、套接字编程、阻塞与非阻塞I/O模型、僵尸进程处理、守护进程创建、进程间通信...

    打通Linux脉络系列:进程、线程和调度

    第一部分:深入彻底搞清楚进程生命周期,进程生命周期创建、退出、停止、以及僵尸是个什么意思;第二部分:深入分析进程创建的写时拷贝技术、以及Linux的线程究竟是怎么回事(为什么称为轻量级进程),此部分也会搞...

    四川大学操作系统课程设计第二次shell编程实验报告.doc

    它可以防止僵尸进程的产生,并且允许父进程获取子进程的退出状态。 - 函数原型:`pid_t wait(int *status);` - **Exit调用**:`exit`函数用于正常终止进程。它可以设置一个整数作为进程的退出状态。 - 函数原型:`...

    unix程序(实验+例题).docx

    当子进程先于父进程结束,它成为僵尸进程。解决方法通常是父进程通过`wait`或`waitpid`函数捕获子进程的退出状态,释放其占用的资源。 13. **守护进程**: 守护进程是运行在后台,不与终端关联的进程,常用于提供...

    linux系统编程之线程.zip

    僵尸进程的产生主要由于进程死后,大部分资源被释放,一点残留资源仍存于系统中,导致内核认为该进程仍存在。 也可使用 pthread_create函数参2(线程属性)来设置线程分离。 【练习】:使用pthread_detach函数实现...

    计算机操作系统实验.pdf

    进程状态分为可执行(R)、睡眠(S)、不间断睡眠(D)、停止或跟踪(T)、僵尸(Z)和空闲(I),这有助于理解进程的生命周期。同时,了解线程数和优先级对进程调度的影响。 实验二涉及Linux常用命令的练习。登录...

    UNIX 高级教程系统技术内幕

    2.8.7 僵尸(Zombie)进程 2.9 小结 2.10 练习 2.11 参考文献 第3 章 线程和轻量级进程(41) 3.1 简介 3.1.1 动机 3.1.2 多线程和多处理器 3.1.3 并发和并行 3.2 基本抽象概念 3.2.1 内核线程 3.2.2 轻量级进程 3.2.3 ...

    现代操作系统考试复习

    - **进程状态**:运行(Running)、就绪(Ready)、等待(Wait)、停止(Stopped)、僵尸(Zombie)。 - **进程控制块(PCB)**:存储进程状态信息的结构。 - **进程间通信(IPC)**:允许进程间交换信息,代价较...

    边学边干linux内核指导

    2. **进程管理**:讲解进程创建、调度、同步、通信等机制,以及信号、僵尸进程和孤儿进程的概念。 3. **内存管理**:探讨物理内存分配、虚拟地址空间、页表、内存分页和交换机制等。 4. **文件系统**:介绍Linux...

    linux操作系统实验报告(2).pdf

    在Linux下,进程有多种状态,如运行(R)、睡眠(S)、停止(T)、僵尸(Z)和终止(X)。它们之间可以互相转换,如运行态进程等待资源时变为睡眠态,接收到信号或执行完毕后退出。 10. **系统监控**: - 使用`...

    LINUX实验程序——————初学者

    这可能涉及到进程的创建(fork()),进程间通信(管道、信号量、共享内存),以及进程状态(运行、睡眠、停止、僵尸等)。 4. **系统调用**:描述中提到的“相关的系统编程的函数理解”可能是指Linux中的系统调用,...

    html网页小游戏素材

    4. **HTML5打字练习游戏.zip**:这类游戏结合了学习和娱乐,通过键盘输入与游戏进程相结合,提高玩家的打字速度和准确性。 5. **HTML5 3D拳王拳击游戏.zip**:3D效果可能通过CSS3或WebGL实现,提供更真实的视觉体验...

Global site tag (gtag.js) - Google Analytics