当前位置:  技术问答>linux和unix

操作系统初学者,Linux一些不懂的地方

    来源: 互联网  发布时间:2016-07-04

    本文导语:  如果按下面的代码,在Linux系统下运行, 在5秒内按下"ctrl + c"产生中断的结果是: This is parent process, pid = 一个整数, This is child process 1 pid = 一个整数, This is child process 2 pid = 一个整数, Parent process will be ki...

如果按下面的代码,在Linux系统下运行,
在5秒内按下"ctrl + c"产生中断的结果是:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
这个结果我知道...
----------------------------------------------------------------------------


现在我把函数parent_stop()中的 "exit(0);" 去掉,
然后也同样的运行时按下"ctrl + c"产生中断,
执行的结果是这样的:
This is parent process, pid = 一个整数,
This is child process 1 pid = 一个整数,
This is child process 2 pid = 一个整数,
Parent process will be killed, The children will be killed first!
Parent process (pid = 一个整数) finished!           //比上面的结果多出来的
-----------------------------------------------------------------------------------


打印出来了这句:Parent process (pid = 一个整数) finished!   
说明在执行parent_stop后,程序返回,执行下面语句
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
wait(0);
wait(0);
printf("Parent process (pid = %d) finished!n", getpid());
exit(0);

我不明白的是,为什么执行了
kill(pid1, SIGUSR1);
kill(pid2, SIGUSR2);
这两句,给两个子进程发送了SIGUSR1,SIGUSR2信号,
为什么子进程没有调用child_stop()函数,打印那两句话呢????子程序已经死掉了吗???


程序代码:
#include
#include
#include
void parent_stop();
void child_stop();
main() {
    int pid1, pid2;
    while((pid1 = fork()) == -1);
    if(pid1 > 0) {
        while((pid2 = fork()) == -1);
        if(pid2 > 0) {
            printf("This is parent process ,pid = %dn", getpid());
            signal(SIGINT, parent_stop);    //按"ctrl + c"退出
            signal(SIGQUIT, parent_stop);    //按"ctrl + "退出
            sleep(5);
            kill(pid1, SIGUSR1);
            kill(pid2, SIGUSR2);
            wait(0);
            wait(0);
            printf("Parent process (pid = %d) finished!n", getpid());
            exit(0);
        } else {
            printf("This is child process 2 pid = %dn", getpid());
            signal(SIGUSR2, child_stop);
            sleep(6);
        } 
    } else {
        printf("This is child process 1 pid = %dn", getpid());
        signal(SIGUSR1, child_stop);
        sleep(6);
    }
}
void parent_stop() {
    printf("Parent process will be killed, The children will be killed first! n");
    exit(0);    //标记处
}
void child_stop() {
    printf("Child process (pid = %d) be killed n", getpid());
    exit(0);
}

|
试了下, 发现在 Ctrl-c的同时, 子进程被kill掉了

在子子进程代码中加入

signal(SIGINT, parent_stop);  // 这个只是图方便哈

就可以避免被杀掉, 最后的结果也是你想要的

|
看着代码头晕 友情UP

    
 
 

您可能感兴趣的文章:

  • 求适合于初学者的操作系统源码
  • java初学者问:java操作平台是什么?用什么工具?
  • 现在哪种linux版本比较适合初学者,我主要是用它学习系统,兼作服务器的操作系统?
  • 想学习linux操作系统,对于初学者应该安装什么版本的linux??
  • 信号PV操作,初学者的疑问
  • 初学Linux操作系统,应该看什么书?安装什么类型的Linux系统?
  • Solaris中,我对未初始化的char*进行strlen()操作不报错! 初学.请多帮忙
  • 初学Unix,问:标准级函数,如fopen,fclose;系统级函数open,close,两者什么关系?(在一篇讲文件操作的文章中看到的)
  • 菜鸟初学java,关于移位操作老看不明白,请高手帮忙解释一下
  • 初学操作系统!有个问题问大家!
  • 初学操作系统,对于fork()函数有多处不理解,拜求大家赐教
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 刚学操作系统,有个地方不理解,见笑了!
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • C++ I/O 成员 flags():操作flags
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • C++ I/O 成员 width():操作域宽度
  • 什么样的操作最耗费服务器的IO操作?
  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • 无操作系统下对U盘的操作
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 请问命令行操作下怎么改Linux操作系统的日期和时间?
  • MyEclipse如何查看和设置文件编码格式相关操作
  • 正在学操作系统原理,做操作系统方面的实验用那种工具较好?
  • 求适合于初学者的操作系统源码 iis7站长之家
  • 请问16位操作系统和32位操作系统的区别?
  • c/c++ 操作符优先级参考
  • 基于linux操作系统之上操作LCD问题,急???
  • javascript操作html复选框checkbox:如何判断复选框是否被选中
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • Plesk 中操作和设置 Docker 容器
  • 如何在一个用户对application操作时防止别的用户对它操作?(好难啊)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3