kill函数用于发送信号给一个进程或者是一个进程组,函数raise允许进程发送一个信号给自身。

raise函数最开始定义与ISO C中,POSIX.1为了与兼容ISO C标准,于是包含了函数raise,但是POSIX.1将函数raise的特性扩展到了线程处理(我们将在12.8中讨论线程是如何与信号发生交互的),因为ISO C并不处理多进程,它并不能定义向kill这样的函数,因为kill函数需要使用一个进程ID的参数。

  1. #include <signal.h>
  2. int kill(pid_t pid, int signo);
  3. int raise(int signo);
  4. Both return: 0 if OK,-1 on error.
  5. The call
  6. raise(signo);
  7. is equilent to the call:
  8. kill(getpid(), signo);

对于kill的参数pid,有四种不同的条件:

pid条件 含义
pid>0 信号被发送到进程ID为pid的进程
pid == 0 信号被发送到所有进程组ID与发送进程的进程组ID一致的进程,注意属于”所有进程”包含了实现定义的系统进程集合,对于许多UNIX系统,这个系统进程集合包含了内核进程以及init(pid 1).
pid < 0 信号被发送到所有进程组ID等于pid绝对值且调用该函数的进程有权限发送信号的进程,同样的,所有进程的集合包含了某些系统进程,正如前面描述的那样
pid == -1 信号被发送到系统上所有调用该函数的进程有权限的所有进程,正如前文所述,该集合包含了某些系统进程。

超级用户可以发送信号到任意进程,对于其他的用户而言,基本规则是:发送进程的real or effective user id必须等于接收进程的real or effective user ID,如果实现支持_POSIX_SAVED_IDS(POSIX.1要求支持),那么就会检查接收进程的saved set-user-id而不是其effective user ID,对于上述权限检查的一个特例是:如果发送的信号是SIGCONT,那么任意处于相同会话的所有进程都可以接收它。

POSIX.1定义了信号编号0为null信号,如果signo参数传递的是0,然后正常的错误检查将被kill函数执行,但是并不会发送任何信号,该技术通常用于检查特定进程是否仍然存在,如果我们发给一个进程null信号,而接受进程已经不存在了,那么kill函数将会返回-1,同时errno将被设置为ESRCH,需要注意的是:UNIX系统会循环利用进程ID,所以一个相同进程ID的进程的出现并不一定意味着还是原来的进程.
如果kill函数的调用造成一个信号生成,并且发送的目标进程是调用进程自身,同时信号是不被阻塞的,那么未阻塞的信号就会在kill函数返回之前被发送到进程。

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/U201013687/p/5518351.html

10.9 kill以及raise函数相关推荐

  1. Linux下raise函数,信号发送函数kill()和raise()

    本文关键字: 信号发送函数,kill(),raise() kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口).这 ...

  2. 1.信号处理之:kill(),alarm(),pause()函数

     1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息. 2查看信号kill -l 注意,后面的32个信号表示的实时信号. 会发现一个规律,前32种信号会有各种不同的名称,后 ...

  3. linux的基础知识——raise函数,abort函数和定时函数

    1.raise和abort函数 \qquadraise函数:int raise(int sig) \qquad功能:给当前进程发送指定信号(自己给自己发信号),raise(signo)相当于kill( ...

  4. python 【raise函数】

    一.raise函数的作用 抛出自定义的异常,stackoverflow社区里面常说的"Manually raising (throwing) an exception in Python&q ...

  5. Python 异常处理--raise函数用法

    Python 异常处理--raise函数用法 参考文章: (1)Python 异常处理--raise函数用法 (2)https://www.cnblogs.com/darkgui34/p/405074 ...

  6. 二元函数对xy同时求导_更新丨10分钟掌握高等数学上册函数极限求解问题(考研、期末复习均可以用)...

    学过高数的都知道,极限在高数的应用频率是非常高的,而且是很多高数知识的基础,求导.变限积分求极限.多重积分求极限等等均会用到 虽然是基础,但是很多人在刚学习的时候就会直接被理论弄懵圈,因此就无法继续再 ...

  7. c语言函数重用,C语言第10讲--程序重用之函数(修改2).ppt

    C语言第10讲--程序重用之函数(修改2) 主讲老师:刘志强 第十讲 程序重用之函数 数学函数及其调用 C语言提供了一些可以用于计算各种不同数学函数的库函数,通过调用它们可进行相应的计算. 例: 要使 ...

  8. 电脑中毒软件都变成java图标_当前数据表有10条记录,若用函数EOF()测试结果为.T.,此时函数RECNO()值是________。 (2.0分)_学小易找答案...

    [单选题]洁净室的内表面应 [单选题]当前数据表有10条记录,若用函数EOF()测试结果为.T.,此时函数RECNO()值是________. (2.0分) [单选题]LD50与毒性评价的关系是 [单 ...

  9. 【信号】函数kill、raise、abort、alarm

    一.函数kill 1. kill函数原型: int kill(pid_t pid, int signo); //signo:信号名 分析: pid  > 0: 发送信号给指定的进程 pid = ...

最新文章

  1. [工具]Tomcat CVE-2017-12615 远程代码执行
  2. Activity的跳转及返回值,activity的生命周期
  3. effective C++ 条款 21:必须返回对象时别妄想返回其reference
  4. selenide小白教程
  5. 变频器服务器电路板维修,变频器电路板维修技巧
  6. iOS项目开发优秀文章汇总
  7. SCOI2019凉凉记
  8. java 子类的同名方法_java 父类子类有同名方法时如何调用的实现
  9. 《深入理解Java虚拟机》Java内存区域与内存溢出异常
  10. Git Stash的使用方法与注意事项
  11. java 常用富文本编辑器_常用的六个富文本编辑器
  12. java 一元线性回归_Java实现一元线性回归
  13. 18款表白源码,搭建网站必备,总有一款适合你
  14. 学习《python模拟测试机器人》笔记2
  15. ChatGpt会替代码农可行性分析
  16. 最简单的ESP8266的Wifi智能小车车教程
  17. 如何免费将excel表格转换成Word文档?
  18. C/C++ 基于Linux的高并发后台服务器-经验小结
  19. 重新启动oracle 服务,在linux重新启动下如何设置oracle服务自动开启
  20. Magento开发文档(七):Magento EAV模型

热门文章

  1. diff命令输出格式解读
  2. 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
  3. C语言实现通用链表初步(三)----单元测试
  4. leetcode第一题两数相加
  5. 链表游戏:CVE-2017-10661之完全利用
  6. Autoencoder 详解
  7. 语音识别,语义理解一站式解决(android平台olami sdk)
  8. JZOJ 3597. 【CQOI2014】危桥
  9. c语言选课系统课程设计,用C语言写一个 学生选课系统
  10. bootstrap insertrow始终插入到最后一行_HBase put命令:插入数据