Unix系统编程()发送信号kill
与shell的kill命令类似,一个进程能够使用kill系统调用向另一进程发送信号。
之所以选择kill作为术语,因为早期UNIX实现中大多数信号的默认行为是终止进程。
#include <signal.h>
int kill(pid_t pid, int sig);
pid参数标识一个或多个目标进程,而sig则指定了要发送的信号。如何解释pid,要视以下4中情况而定。
如果pid大于0,那么会发送信号给由pid指定的进程。
如果pid等于0,那么会发送信号给与调用进程同组的每个进程,包括调用进程自身。
如果pid小于-1,那么会向组ID等于该pid绝对值的进程组内所有下属进程发送信号。向一个进程组的所有进程发送信号在shell作业控制中有特殊的用途。
如果pid等于-1,那么信号的发送范围是:调用进程有权将信号发往的每个目标进程,除去init(进程ID为1)和调用进程自身。如果特权级进程发起这一调用,那么会发送信号给系统中的所有进程,上述两个进程除外。显而易见,有时也将这种信号发送方式称之为广播信号。
如果并无进程与指定的pid相匹配,那么kill调用失败,同时将errno设置为ESRCH("查无此进程")。
进程要发送信号给另一进程,还需要适当的权限,其权限规则如下。
特权级(CAP_KILL)进程可以向任何进程发送信号。
以root用户和组运行的init进程(进程号为1),是一种特例,仅能接受已安装了处理器函数的信号。这可以防止系统管理员意外杀死init 进程——这一系统运作的基石。
如果所示,如果发送者的实际或有效用户ID匹配于接受者的实际用户ID或者保存设置用户ID(saved set-user-id),那么非特权进程也可以向另一进程发送信号。利用这一规则,用户可以向由他们启动的set-user-ID程序发送信号,而无需考虑目标进程有效用户ID的当前设置。将目标进程有效用户ID排除在检查范围之外,这一举措的辅助作用在于防止用户某甲向用户某乙的进程发送信号,而该进程正在执行的set-user-ID程序又属于用户某甲。
SIGCONT信号需要特殊处理。无论对用户ID的检查结果如何,非特权进程可以向同一会话中的任何其他进程发送这一信号。利用这一规则,运行作业控制的shell可以重启已停止的作业(进程组),即使作业进程已经修改了它们的用户ID。
如果进程无权发送信号给所请求的pid,那么kill调用将失败,且将errno置为EPERM。若pid所指为一系列进程(即pid是负值)时,只要向其中之一发送信号,则kill调用成功。
Unix系统编程()发送信号kill的更多相关文章
- 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll
关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...
- 《Linux/Unix系统编程手册》 时间子系统
Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...
- linux系统编程之信号(一):中断与信号
一,什么是中断? 1.中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被 ...
- linux系统编程之信号(二)
经过了漫长的间歇,对于c语言的学习也被中断了很久,现实确实有很多的无耐,计划中的事情总会被打乱,但不管怎样,学习的道路是不能休止的,所以经过了一断温习后现在继续学习C语言,话不多说,进入正题: 信号分 ...
- 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...
- 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍
关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...
- 《Linux/Unix系统编程手册》读书笔记 目录
<Linux/Unix系统编程手册>读书笔记1 (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2 (创建于4月9日,最后更新4月10日) ...
- 《Linux/Unix系统编程手册》读书笔记9(文件属性)
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- 《Linux/Unix系统编程手册》读书笔记6
<Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...
随机推荐
- 步步为营_Android开发课[3]_Activity学习
Focus on technology, enjoy life! -- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/deta ...
- [小技巧] gcc attribute error 属性小试
gcc __attribute__ 里有一个属性是 error 能够用于编译时报错. 參考: https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Functio ...
- 创建组件“AxLicenseControl”失败
打开以前的程序,准备来添加一个功能,打开主程序就报错: 我未曾改变过版本,原来是由于破解测试需要,修改了系统时间,时间对不了,ArcGIS的问题,改过来就正常了.
- T-SQL 之 运行时生成语句
一.用EXECUTE执行动态命令 EXECUTE命令可以执行存储过程.函数和动态的字符串命令.注意此语句的作用正如前面在介绍批处理时,如果批中的第一条语句是"EXECUTE Proc_nam ...
- onvif获取摄像头的流媒体地址完整流程
linux设备上的Onvif 实现6:获取摄像头的流媒体地址完整流程 整体流程: Probe: 发现网络摄像头,获取webserver地址 http://192.168.15.240/onvif/de ...
- iOS arc和非arc 适用 宏
iOS arc和非arc 适用 宏 1:使用宏 + (void)showAlertWithMessage:(NSString *)messages { dispatch_async(dispatch_ ...
- 安全的远程登录(SSH)
Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定:SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层) ...
- NGUI Tutorial 4 ScrollView
一.createScrollView 1.First, select the panel you want to be your scroll view and right-click anywher ...
- taro 打包微信小程序运行失败(二)
1.报错信息 thirdScriptError sdk uncaught third Error Cannot read property 'dispatch' of null TypeError: ...
- Creating a Fragment: constructor vs newInstance()
from stack overflow and another chapter I recently grew tired of constantly having to know String ke ...