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

/ 10,651评论 / 38436阅读 / 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. Brandenven说道:

    order cheap clomid: rexpharm – can you get generic clomid online

  2. Узнай все о варикоцеле 1 степени рецидив варикоцеле

  3. Bradleyarrip说道:

    amoxicillin generic Amoxicillin for sale amoxicillin 825 mg

  4. Brandenven说道:

    where can i buy cheap clomid no prescription: generic clomid – can you get generic clomid online

  5. Узнай все о клиника варикоцеле варикоцеле

  6. StevenWearo说道:

    how can i get generic clomid price: buy clomid – can you get generic clomid online

  7. Derekjup说道:

    dapoxetine price: buy dapoxetine online – cheap priligy

  8. Узнай все о варикоцеле левого яичка чем опасно варикоцеле

  9. Bradleyarrip说道:

    generic amoxicillin cost Amoxicillin buy online buy amoxicillin without prescription

  10. Derekjup说道:

    prednisone generic cost: cheap prednisone – cost of prednisone tablets

  11. StevenWearo说道:

    where to buy clomid without insurance: rexpharm – can i order generic clomid without rx

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

  13. DanielArill说道:

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

  14. Тут можно преобрести купить сейф под карабин интернет магазин сейфов для оружия

  15. StevenWearo说道:

    priligy maxpharm: max pharm – buy priligy

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

  17. DanielArill说道:

    amoxicillin buy canada https://clomidrexpharm.com/# can i order cheap clomid

  18. Brandenven说道:

    where to buy prednisone uk: ray pharm – where can i buy prednisone without a prescription

  19. StevenWearo说道:

    purchase amoxicillin online without prescription: amoxil – amoxicillin 500 mg price

  20. Bradleyarrip说道:

    dapoxetine price buy dapoxetine online Priligy tablets

  21. Bradleyarrip说道:

    can i get generic clomid pills clomid rex pharm can you get clomid without dr prescription

  22. Brandenven说道:

    no prescription prednisone canadian pharmacy: raypharm – order prednisone online no prescription

  23. accepes说道:

    priligy near me In countries where beta lactams are the drug of first choice for LB, clinicians should have a higher level of suspicion for other TBDs, since these are likely not co treated as such

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

  25. Bradleyarrip说道:

    amoxicillin 500 mg where to buy cheap amoxil amoxicillin 500mg capsules

  26. Brandenven说道:

    buy dapoxetine online: max pharm – Priligy tablets

  27. StevenWearo说道:

    prednisone tablets 2.5 mg: generic Prednisone – prednisone without prescription

  28. Узнай все о варикоцеле слева у мужчин варикоцеле слева у мужчин

  29. DanielArill说道:

    amoxicillin 250 mg capsule http://amoxilcompharm.com/# amoxicillin no prescription

  30. Bradleyarrip说道:

    prednisone brand name in india order Prednisone cheap prednisone online

  31. Derekjup说道:

    prednisone 20mg prescription cost: raypharm – prednisone 4 mg daily

  32. StevenWearo说道:

    prednisone 30 mg: cheap prednisone – buy prednisone 1 mg mexico

  33. DanielArill说道:

    875 mg amoxicillin cost http://amoxilcompharm.com/# buy amoxicillin online mexico

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

  35. Provoked thought and taught me something new, as if my brain needed more exercise.

  36. DanielArill说道:

    buying amoxicillin online https://priligymaxpharm.com/# priligy

  37. StevenWearo说道:

    buying amoxicillin online: Amoxicillin buy online – amoxicillin 500mg tablets price in india

  38. DanielArill说道:

    amoxicillin pharmacy price http://prednisoneraypharm.com/# 50 mg prednisone canada pharmacy

  39. Derekjup说道:

    prednisone 2.5 mg: cheap prednisone – prednisone 50 mg for sale

  40. Brandenven说道:

    where to buy prednisone 20mg no prescription: ray pharm – generic prednisone 10mg

  41. Derekjup说道:

    prednisone oral: ray pharm – prednisone price australia

  42. StevenWearo说道:

    prednisone cream brand name: prednisoneraypharm – prednisone uk price

  43. Brandenven说道:

    cost of amoxicillin 875 mg: amoxil com pharm – buy amoxicillin online without prescription

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

  45. Bradleyarrip说道:

    can i order generic clomid pill buy clomid where buy clomid prices

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

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

发表回复

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