1、为什么会出现系统调用被中断的情况?

  进程在执行一个低速系统调用而阻塞期间捕捉到一个信号时,该系统调用就被中断不再继续执行。该系统调用返回出错,其errno被设置为EINTR。这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个唤醒阻塞的系统调用的好机会。

2、不可重入函数的原因?

  (a)它们使用静态的数据结构;(b)调用malloc或free;(c)它们是标准IO函数。

3、在对某个信号解除阻塞之前,如果这个信号发生了多次,那就如何处理?

  UNIX只递送这种信号一次,其它信号不进行排队,只被简单的丢弃。

4、一个进程能发送信号给哪些进程?

  如果这个进程拥有超级用户权限,这可以发给任何进程;如果这个进程是普通用户进程,则发送者的实际或者有效用户ID必须等于接收者的实际或有效用户ID。有一个特例是,如果被发送的信号是SIGCONT,则进程可将它发送给属于同一会话的任何其他进程。

5、信号传递有两个阶段?

  一个是信号产生:内核更新目标进程的数据结构以表示一个新信号已被发送;另一个是信号传递:内核强迫目标进程通过以下方式对信号做出反应:或改变目标进程的指向状态,或开始执行一个特定的信号处理程序,或者两者都是。已经产生但还没有传递的信号称为挂起信号。

6、信号处理函数是否必须是可重入的?

  当信号执行一个信号处理程序的函数时,通常“屏蔽”相应的信号,即自动阻塞这个信号直到处理程序结束。因此,所处理的信号的另一次出现不能中断信号处理程序,所以,信号处理函数不必是可重入的。

7、信号处理程序在多线程中是怎样调用的?

  每个线程都有自己的挂起信号掩码(哪些信号正等待被传递)和阻塞信号掩码(哪些信号被阻塞)。只能给多线程应用发信号,而不能给单个线程发信号。每个发生给多线程应用的信号仅传送给一个线程,这个线程是由内核从不阻塞该信号的线程中随意选择出来的。如果向多线程应用发生了一个致命的信号,那么内核将杀死该应用的所有线程,而不仅仅是杀死接收信号的那个线程。

8、一个信号处理程序可以打断另一个信号处理程序的执行吗?

  可以的,只要这两个信号处理程序不是同一个就行。apue中讲解alarm和pause函数中举了一个例子,在该例子中SIGINT的处理程序就被SIGALRM处理程序中断了。

9、执行完某个信号的处理程序后,该信号的处理会不会恢复为系统默认的动作?

  不会,只有早期版本的系统会,现在的不会了。

10、struct signal中的sa_handle和sa_sigaciton字段的关系?

  struct signal结构中的sa_handler和sa_sigaction字段可能使用同一存储区,所以应用程序只能一次使用这两个字段中的一个。通常我们使用的是第一个字段,如果设置了SA_SIGINFO标志,则是使用sa_sigaction字段。

11、调用sigaction函数时设置的信号屏蔽集是在信号处理函数运行时直接设置为进程的信号屏蔽集还是并入进程的信号屏蔽集?

  在调用处理函数之前将信号屏蔽集并入进程的信号屏蔽集,函数退出后再恢复进程先前的信号屏蔽集。

12、我们知道在调用信号处理程序之前会将当前处理的信号加入到信号屏蔽集中,如果在信号处理程序中使用longjmp跳出信号处理程序,那么信号屏蔽集是否会恢复到调用信号处理程序之前的状态?

  POSIX.1并没有对此说明,不过我们可以使用函数sigsetjmp和siglongjmp来显示解决这个问题。如果在调用sigsetjmp时传递的savemask参数不为0,则sigsetjmp在env中保存进程的当前信号屏蔽集。调用siglongjmp时,如果带非0 savemask的sigsetjmp调用已经保存了env,则siglongjmp从其中恢复保存的信号屏蔽集。

13、哪些信号是不能被捕获或忽略的?

  SIGKILL和SIGSTOP是不能被捕获或忽略的。

14、abort的作用是什么?

发送SIGABRT信号给进程(进程不应该忽略此或阻塞该信号),abort确保进程被终止前对所有打开标准I/O流进行冲洗和关闭,除非进程自己捕获了SIGABRT处理函数,并且调用_exit让进程终止。

15、kill使其为调用者产生信号,是不是kill返回前对应的信号就传送给了该进程?

  不一定,首先要保证该信号不被阻塞,其次保证该进程没有其它未决未阻塞的信号。如果kill产生的信号是不被阻塞的,则kill返回前该信号(或某个未决、未阻塞的信号)就被传送给了该进程。

16、system对信号是怎么处理的?

  system会忽略SIGINT和SIGQUIT,阻塞SIGCHLD。忽略SIGINT和SIGQUIT这两个信号是保证调用system产生的子进程捕获这两个信号,而调用system的进程则不应该捕获这两个信号。阻塞SIGCHLD保证我们能正确的获得system产生的子进程的终止状态。

17、fork系统调用后子进程会继承信号屏蔽掩码,信号处理函数吗?

  会的,不过未处理的信号集会设置为空集。

18、waitpid函数什么情况下会返回?

  如果该函数等待的进程或进程组状态改变了就会返回,如进程终止了(不管子进程是否发生SIGCHLD信号给父进程),或者该函数等待的进程或进程组不存在了,则会出错返回。

19、一个停止的进程接到SIGCONT信号时,会怎样?

  当对一个停止的进程产生一个SIGCONT信号时,该进程就继续运行,即使该信号是被阻塞或忽略的也是如此。

20、linux下的作业控制命令有哪些?

  fg、bg、jobs、&、ctrl + z都是跟作业有关的命令。& 最经常被用到,这个用在一个命令的最后,可以把这个命令放到后台执行;ctrl + z,可以将一个正在前台执行的命令放到后台,并且暂停;jobs,查看当前有多少在后台运行的命令;fg,将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid);bg,将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。

linux有关信号的FAQ相关推荐

  1. linux kill信号列表

    linux kill信号列表 $ kill -l 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL 5) SIGTRAP      6 ...

  2. linux多线程信号总结

    linux多线程信号总结-businiaowyf-ChinaUnix博客 linux 多线程信号处理总结 - CobbLiu - 博客园

  3. linux python 信号,Python模块之信号(signal)

    在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解.signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时 ...

  4. linux 查看进程的信号,Linux 进程信号查看与控制

    Linux 进程信号查看与控制 1) SIGHUP 本信号在用户终端连接 (正常或非正常) 结束时发出 通常是在终端的控制进程结束时 通知同一 session 内的各个作业 这时它们与控制终端不再关联 ...

  5. Linux进程间通信——信号

    一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...

  6. Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号

    首先区分一下Linux信号跟进程间通信中的信号量,它们的关系就犹如老婆跟老婆饼一样,没有一毛钱的关系. 信号的概念 信号的概念:信号是进程之间事件异步通知的一种方式,属于软中断.比如:红绿灯是一种信号 ...

  7. Linux Signal信号详解

    信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全 ...

  8. linux. qt信号崩溃,【创龙AM4379 Cortex-A9试用体验】之I/O中断异步通知驱动程序+QT捕获Linux系统信号+测试信号通知...

    2.驱动程序 安装字符设备驱动程序开发流程开发. 2.1资源定义 定义按键I/O端口号.I/O中断号,以及字符设备的主设备号变量: #define GPIO_KEY1_PIN_NUM (3*32 + ...

  9. Linux系统信号定义

    Linux系统信号,即signal,定义通常在这个头文件中: /usr/include/asm-generic/signal.h 常见的信号如下: #define SIGHUP         1 # ...

最新文章

  1. 2021年大数据Flink(六):Flink On Yarn模式
  2. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch
  3. android 点击热区,Android-android中有没有提供点击热区的功能
  4. 计算机网络之传输层:2、UDP协议
  5. 世界记忆大师的记忆力训练方法
  6. 角逐“互联网+疫苗”赛道,百度健康杀入医药电商巨头腹地
  7. 达摩院高清人像美肤模型ABPN CVPR论文深入解读
  8. AMD GPU模式设置(1):核心数据结构
  9. 计算机科学与技术选修课方向,计算机与科学专业主要的课程和学习方向是什么?...
  10. Ribbon负载均衡服务调用
  11. 设置elment ui plus 的el table的边框线
  12. 实验七:定时/计数器8253、8254
  13. rdesktop参数
  14. 金额平均分配算法 python实现
  15. iOS逆向学习之 Mac 登录到 iPhone
  16. 应试教育与理想教育之间
  17. 强化学习教程(四):从PDG到DDPG的原理及tf代码实现详解
  18. 微信视频号火了,品牌营销的风又将吹向哪儿?
  19. MSN 8.1 优化
  20. 《大型网站技术架构:核心原理与案例分析》之读后小结

热门文章

  1. 迅为4412开发板开发笔记--开发板与主机和ubuntu的ping通
  2. 2017年3月20日下午学习日志
  3. 夺命雷公狗---PDO NO:3与连接有关的选项
  4. ios category类别的使用
  5. 小鑫与斐波那契(一)
  6. C#绘图工具之Move
  7. 诗与远方:无题(十六)
  8. JSP标记之指令标记介绍
  9. Ranger-AdminServer安装Version2.0.0
  10. Spark GraphX算法 - PageRank算法