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

/ 10,724评论 / 38691阅读 / 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. DanielArill说道:

    amoxicillin discount http://prednisoneraypharm.com/# prednisone 20mg

  2. Предлагаем услуги профессиональных инженеров офицальной мастерской.
    Еслли вы искали сервисный центр xiaomi, можете посмотреть на сайте: сервисный центр xiaomi
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  3. StevenWearo说道:

    buy priligy max pharm: buy dapoxetine online – buy priligy

  4. Узнай все о варикоцеле слева у мужчин варикоцеле 2 степени

  5. DanielArill说道:

    amoxicillin without prescription http://clomidrexpharm.com/# order generic clomid

  6. Bradleyarrip说道:

    cost of prednisone in canada buy prednisone without rx prednisone 50 mg prices

  7. StevenWearo说道:

    can you buy cheap clomid without rx: clomid online – where to buy generic clomid without rx

  8. DanielArill说道:

    amoxicillin 500mg price http://clomidrexpharm.com/# can i order generic clomid for sale

  9. Узнай все о варикоцеле слева лапароскопия варикоцеле

  10. DanielArill说道:

    buy amoxicillin online mexico http://priligymaxpharm.com/# dapoxetine price

  11. StevenWearo说道:

    amoxicillin 800 mg price: Com Pharm – amoxicillin generic

  12. Brandenven说道:

    get clomid: rexpharm – can i purchase cheap clomid

  13. Derekjup说道:

    where to buy cheap clomid no prescription: rexpharm – cost generic clomid

  14. StevenWearo说道:

    amoxicillin over counter: com pharm – amoxicillin discount

  15. Bradleyarrip说道:

    buy dapoxetine online dapoxetine price buy dapoxetine online

  16. DanielArill说道:

    canadian pharmacy amoxicillin http://priligymaxpharm.com/# dapoxetine price

  17. Bradleyarrip说道:

    amoxicillin 500mg price Amoxicillin for sale can i buy amoxicillin over the counter

  18. Brandenven说道:

    prednisone 20 mg pill: prednisone ray pharm – prednisone 2 mg

  19. DanielArill说道:

    amoxicillin 500mg capsule cost https://clomidrexpharm.com/# where can i get clomid pill

  20. Bradleyarrip说道:

    amoxicillin 500mg buy amoxicillin 500mg online amoxicillin over the counter in canada

  21. StevenWearo说道:

    prednisone pharmacy: ray pharm – prednisone 2.5 mg price

  22. Brandenven说道:

    prednisone in india: prednisone ray pharm – cheap prednisone 20 mg

  23. ShaunLolve说道:

    cheap erectile dysfunction pills online http://canadiandrugsgate.com/# natural ed cures
    erectile dysfunction natural remedies

  24. LarryHer说道:

    mexican drugstore online: MexicanPharmGate – mexican drugstore online

  25. Jefferyswava说道:

    mexican mail order pharmacies: mexico pharmacy – reputable mexican pharmacies online

  26. Здесь можно преобрести модели сейфов сейф купить москва

  27. LarryHer说道:

    mexico pharmacies prescription drugs: mexican pharmacy online medications – mexican mail order pharmacies

  28. GlennSeade说道:

    mexico pharmacies prescription drugs mexican pharmacy mexican border pharmacies shipping to usa

  29. GlennSeade说道:

    top 10 pharmacies in india Online medicine home delivery reputable indian pharmacies

  30. Тут можно преобрести огнеупорный сейф купить купить огнестойкий сейф в москве

  31. Bradleyarrip说道:

    http://mexicanpharmgate.com/# mexico drug stores pharmacies

  32. LarryHer说道:

    best ed pill: Canada pharmacy – 100mg viagra without a doctor prescription

  33. Bradleyarrip说道:

    http://indianpharmacyeasy.com/# buy prescription drugs from india

  34. Тут можно преобрести где купить сейф для оружия сейфы для оружия цены

  35. Тут можно преобрести сейф огнестойкий цена сейфы пожаростойкие

  36. Тут можно преобрести сейф огнестойкий в москве сейф жаростойкий

  37. Тут можно преобрести сейф для охотничьего ружья ящик для оружия купить

  38. Jefferyswava说道:

    ed cure: canadiandrugsgate – new ed drugs

  39. Тут можно преобрести сейф огнестойкий купить противопожарный сейф

  40. Здесь можно преобрести купить сейф в москве в магазине сейфов купить сейф в москве

  41. LarryHer说道:

    top online pharmacy india: indianpharmacyeasy.com – india pharmacy mail order

  42. Jefferyswava说道:

    cheapest online pharmacy india: Online medicine home delivery – top 10 pharmacies in india

  43. Тут можно преобрести сейф огнестойкий сейф противопожарный купить

  44. GlennSeade说道:

    п»їbest mexican online pharmacies mexico pharmacy mexican mail order pharmacies

  45. Тут можно преобрести сейф оружейный сейф купить оружейный

  46. Jefferyswava说道:

    reputable indian pharmacies: indianpharmacyeasy.com – top 10 pharmacies in india

  47. GlennSeade说道:

    muse for ed Canada pharmacy online mens ed

发表回复

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