10.9 kill以及raise函数
kill函数用于发送信号给一个进程或者是一个进程组,函数raise允许进程发送一个信号给自身。
raise函数最开始定义与ISO C中,POSIX.1为了与兼容ISO C标准,于是包含了函数raise,但是POSIX.1将函数raise的特性扩展到了线程处理(我们将在12.8中讨论线程是如何与信号发生交互的),因为ISO C并不处理多进程,它并不能定义向kill这样的函数,因为kill函数需要使用一个进程ID的参数。
#include <signal.h>
int kill(pid_t pid, int signo);
int raise(int signo);
Both return: 0 if OK,-1 on error.
The call
raise(signo);
is equilent to the call:
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函数返回之前被发送到进程。
转载于:https://www.cnblogs.com/U201013687/p/5518351.html
10.9 kill以及raise函数相关推荐
- Linux下raise函数,信号发送函数kill()和raise()
本文关键字: 信号发送函数,kill(),raise() kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口).这 ...
- 1.信号处理之:kill(),alarm(),pause()函数
1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息. 2查看信号kill -l 注意,后面的32个信号表示的实时信号. 会发现一个规律,前32种信号会有各种不同的名称,后 ...
- linux的基础知识——raise函数,abort函数和定时函数
1.raise和abort函数 \qquadraise函数:int raise(int sig) \qquad功能:给当前进程发送指定信号(自己给自己发信号),raise(signo)相当于kill( ...
- python 【raise函数】
一.raise函数的作用 抛出自定义的异常,stackoverflow社区里面常说的"Manually raising (throwing) an exception in Python&q ...
- Python 异常处理--raise函数用法
Python 异常处理--raise函数用法 参考文章: (1)Python 异常处理--raise函数用法 (2)https://www.cnblogs.com/darkgui34/p/405074 ...
- 二元函数对xy同时求导_更新丨10分钟掌握高等数学上册函数极限求解问题(考研、期末复习均可以用)...
学过高数的都知道,极限在高数的应用频率是非常高的,而且是很多高数知识的基础,求导.变限积分求极限.多重积分求极限等等均会用到 虽然是基础,但是很多人在刚学习的时候就会直接被理论弄懵圈,因此就无法继续再 ...
- c语言函数重用,C语言第10讲--程序重用之函数(修改2).ppt
C语言第10讲--程序重用之函数(修改2) 主讲老师:刘志强 第十讲 程序重用之函数 数学函数及其调用 C语言提供了一些可以用于计算各种不同数学函数的库函数,通过调用它们可进行相应的计算. 例: 要使 ...
- 电脑中毒软件都变成java图标_当前数据表有10条记录,若用函数EOF()测试结果为.T.,此时函数RECNO()值是________。 (2.0分)_学小易找答案...
[单选题]洁净室的内表面应 [单选题]当前数据表有10条记录,若用函数EOF()测试结果为.T.,此时函数RECNO()值是________. (2.0分) [单选题]LD50与毒性评价的关系是 [单 ...
- 【信号】函数kill、raise、abort、alarm
一.函数kill 1. kill函数原型: int kill(pid_t pid, int signo); //signo:信号名 分析: pid > 0: 发送信号给指定的进程 pid = ...
最新文章
- [工具]Tomcat CVE-2017-12615 远程代码执行
- Activity的跳转及返回值,activity的生命周期
- effective C++ 条款 21:必须返回对象时别妄想返回其reference
- selenide小白教程
- 变频器服务器电路板维修,变频器电路板维修技巧
- iOS项目开发优秀文章汇总
- SCOI2019凉凉记
- java 子类的同名方法_java 父类子类有同名方法时如何调用的实现
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
- Git Stash的使用方法与注意事项
- java 常用富文本编辑器_常用的六个富文本编辑器
- java 一元线性回归_Java实现一元线性回归
- 18款表白源码,搭建网站必备,总有一款适合你
- 学习《python模拟测试机器人》笔记2
- ChatGpt会替代码农可行性分析
- 最简单的ESP8266的Wifi智能小车车教程
- 如何免费将excel表格转换成Word文档?
- C/C++ 基于Linux的高并发后台服务器-经验小结
- 重新启动oracle 服务,在linux重新启动下如何设置oracle服务自动开启
- Magento开发文档(七):Magento EAV模型