[linux操作系统实验]信号机制(按ctrl c给父进程发信号后,子进程没有反应?)

/ 4,735评论 / 18414阅读 / 1点赞

问题

按ctrl c给父进程传信号后,父进程会发送信号给子进程,为什么子进程没有反应?

而只有修改父进程给子进程发送的信号为SIGINT时才会有反应?


实验具体内容

实验内容

概念

信号的基本概念

信号的发送

对信号的处理

涉及函数

kill( )

signal( )

名  字说          明
01SIGHUP挂起(hangup)
02SIGINT中断,当用户从键盘按^c键或^break键时
03SIGQUIT退出,当用户从键盘按quit键时
04SIGILL非法指令
05SIGTRAP跟踪陷阱(trace trap),启动进程,跟踪代码的执行
06SIGIOTIOT指令
07SIGEMTEMT指令
08SIGFPE浮点运算溢出
09SIGKILL杀死、终止进程 
10SIGBUS总线错误
11SIGSEGV段违例(segmentation  violation),进程试图去访问其虚地址空间以外的位置
12SIGSYS系统调用中参数错,如系统调用号非法
13SIGPIPE向某个非读管道中写入数据
14SIGALRM闹钟。当某进程希望在某时间后接收信号时发此信号
15SIGTERM软件终止(software  termination)
16SIGUSR1用户自定义信号1
17SIGUSR2用户自定义信号2
18SIGCLD某个子进程死
19SIGPWR电源故障

源代码

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <iostream>
#include <sys/wait.h>
#include <sys/types.h>
using namespace std;

/*记录子进程pid,
 * whois:
 *      0:父进程
 *      1:子进程1
 *      2:子进程2*/
int pid1 = 0, pid2 = 0, whois = 0;

/*信号*/
#define COOLSIG SIGINT

/*响应信号*/
void do_exit(int)
{
        switch (whois)
        {
        case 0:
        {
                kill(pid1, COOLSIG);
                kill(pid2, COOLSIG);
                cout << "<< wait1: " << wait(0) << endl;
                cout << "<< wait2: " << wait(0) << endl;
                cout << "<< 父进程退出" << endl;
        }break;
        case 1:;
        case 2:
        {
                cout << "<< 子进程" << whois << "结束!" << endl;
        }break;
        }
        exit(0);
}

int main()
{
        cout << "<< COOLSIG = " << COOLSIG << endl;
        pid1 = fork();
        if (pid1 == -1){
                cout << "<< fork error" << endl;
        }
        else if (pid1 == 0)
        {
                 whois = 1;      //子进程1
                 signal(COOLSIG, do_exit);
        }
        else
        {
                cout << "pid1 = " << pid1 << endl;
                pid2 = fork();  //父进程
             	if (pid2 == -1)
                {
                        cout << "<< fork error" << endl;
                }
                else if (pid2 == 0)
                {
                        whois = 2;      //子进程2
                        signal(COOLSIG,do_exit);
                }
                else
                {
                        cout << "pid2 = " << pid2 << endl;
                        whois = 0;      //父进程
                        signal(SIGINT, do_exit);
                        cout << "<< 父进程等待 ctrl + C ..." << endl;
                }
        }
        while (1)
                usleep(100);
        cout << "<< 退出了,whois = " << whois << endl;
        return 0;
}

运行结果截图

思考

  1. Martin Turnbough说道:

    The grace and authority with which you handle topics are awe-inspiring. I always come away with new knowledge.

  2. Dung Flannagan说道:

    The passion for this subject shines through The words. Inspiring!

  3. Edwardtes说道:

    ?Onlayn Kazino: ?Onlayn Kazino – Pin up 306 casino

  4. Dacia Eash说道:

    The grace and authority you handle topics with are as mesmerizing as a moonlit dance. I’m thoroughly impressed.

  5. Edwardtes说道:

    Pin Up Kazino ?Onlayn: pin-up360 – pin-up 141 casino

  6. RobertMob说道:

    https://autolux-azerbaijan.com/# Pin Up Azerbaycan ?Onlayn Kazino

  7. Edwardtes说道:

    Pin Up Azerbaycan: pin-up360 – pin-up kazino

  8. Dean Daunt说道:

    Reading The work is like gazing at a masterpiece; every detail contributes to a breathtaking whole.

  9. Debi Chhabra说道:

    You tackle topics with such finesse, it’s like watching a skilled chef at work. Serving up knowledge with flair!

  10. Jeffery Brambila说道:

    The posts are like stars in the sky—each one shining brightly, guiding my curiosity.

  11. Isadora Rudeen说道:

    The Writing is like a lighthouse for my curiosity, guiding me through the fog of information.

  12. Diplomi_hpmt说道:

    где можно купить диплом где можно купить диплом .

  13. luckyjet_icKi说道:

    игра лаки джет на деньги http://www.1win-luckyjet-game.ru/ .

  14. Edwardtes说道:

    Pin-Up Casino: Pin Up Azerbaycan – Pin-up Giris

  15. Diplomi_ljmt说道:

    купить диплом техникума в уфе купить диплом техникума в уфе .

  16. Diplomi_mdmt说道:

    бланк диплома о высшем образовании ссср купить бланк диплома о высшем образовании ссср купить .

  17. Edwardtes说道:

    Pin-up Giris: pin-up 141 casino – Pin Up Azerbaycan ?Onlayn Kazino

  18. Edwardtes说道:

    ?Onlayn Kazino: pin-up 141 casino – Pin Up

  19. The content is like a treasure chest; every post uncovers gems of wisdom. X marks the spot here.

  20. Reading this gave me a lot of insights. The expertise really shines through, and I’m grateful for it.

  21. The writing style is captivating. Finally, something that can keep my attention longer than a TikTok video.

  22. Adding value to the conversation in a way that’s as engaging as a flirtatious wink. Can’t wait to hear more.

  23. Diplom_yzsr说道:

    купить диплом в курске vm-tver.ru .

  24. Diplom_ausr说道:

    купить диплом в ярославле https://vm-tver.ru .

  25. Diplom_lvsr说道:

    купить диплом в архангельске https://www.vm-tver.ru .

  26. Diplom_wasr说道:

    купить диплом в смоленске vm-tver.ru .

  27. Gichardkaf说道:

    Каждый год в середине сентября проходит Тюменский инновационный форум «НЕФТЬГАЗТЭК».
    Форум посвящен устройству мнтодов инновационного продвижения секторов топливно-энергетического комплекса, обсуждению и поиску решений, созданию наилучших условий для развития инноваторских проектов. Ежегодный тюменский форум является важной дискуссионной площадкой по увеличению роста нефтегазовой ветви в Российской Федерации, имеет большой авторитет и своевременность, созвучен корпоративной стратегии продвижения инновационного направления в Российской Федерации
    https://neftgaztek.ru/

  28. таблетки для похудения цена таблетки для похудения цена .

  29. таблетки для похудения купить таблетки для похудения купить .

  30. Diplomi_rdMa说道:

    купить диплом медсестры https://school5-priozersk.ru/ .

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注