Linux 信号(一)—— kill 函数

世事并无好坏之分,全看我们怎么去想。—— 哈姆雷特·第二幕第二景

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

1 #include <signal.h>
2 int kill(pid_t pid, int signo);

用于给指定的进程或进程组发送信号。成功返回 0,出错返回 -1。

  • pid > 0:将信号发送给进程 ID 为 pid 的进程。
  • pid == 0:将信号发送给与发送进程属于同一进程组的所有进程。
  • pid < 0:将信号发送给进程组 ID 等于 pid 的绝对值的所有进程。
  • pid == -1:将信号发送给系统中所有进程。

上述中的“所有进程”不包括系统进程。

另外,调用 kill 函数的进程要有向目标进程发送信号的权限。非 root 用户通常只能向与调用 kill 函数进程具有相同用户 ID 的进程发送信号。

如果 signo 为 0,则代表空信号,kill 不发送实际信号,但可以用来确定指定进程是否仍存在。如果向一个不存在的进程发送空信号,kill 返回 -1,errno 被设置为 ESRCH (表示 pid 指定的进程或进程组不存在)。

其他 errno:“EINVAL:指定的 singo 无效;EPERM:权限不够”。

对于进程是否存在这种测试不是原子操作,当 kill 返回时,也可能原来存在的进程此时已终止。另外,系统会复用 pid,所以我们指定 pid 的进程并不一定就是想要测试的那个进程。所以这种测试并不可靠。

学习资料: 《unix 环境高级编程》

时间: 2024-11-09 00:26:05

Linux 信号(一)—— kill 函数的相关文章

Linux信号、信号处理和信号处理函数

信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式.在Linux系统中,根据POSIX标准扩展以后的信号机制,不仅可以用来通知某种程序发生了什么事件,还可以给进程传递数据. 一.信号的来源 信号的来源可以有很多种试,按照产生条件的不同可以分为硬件和软件两种. 1.  硬件方式 当用户在终端上按下某键时,将产生信号.如按下组合键后将产生一个SIGINT信号. 硬件异常产生信号:除数据.无效的存储访问等.这些事件通常由硬件(如:CPU)检测到,并将其通知

Linux下Kill函数用法

http://www.cnblogs.com/winnxm/archive/2010/01/22/1654502.html [ KILL ]功能描述: 用于向任何进程组或进程发送信号. 1 #include <sys/types.h> 2 3 #include <signal.h> 4 5 int kill(pid_t pid, int sig); 6 7 参数: pid:可能选择有以下四种 1. pid大于零时,pid是信号欲送往的进程的标识. 2. pid等于零时,信号将送往所

Linux下利用signal函数处理ctrl+c等信号

前言 linux下可以通过信号机制来实现程序的软中断,是一个非常有用的编程方法.我们平时在程序运行的时候按下ctrl-c.ctrl-z或者kill一个进程的时候其实都等效于向这个进程发送了一个特定信号,当进程捕获到信号后,进程会被中断并立即跳转到信号处理函数.默认情况下一个程序对ctrl-c发出的信号(SIGINT)的处理方式是退出进程,所以当我们按下ctrl-c的时候就可以终止一个进程的运行. signal函数 但是有时候我们希望我们的程序在被信号终止之前执行一些特定的收尾流程,或者我们希望我

Linux 信号(二)—— signal 函数

弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心理卫生从业者广为采用. —— <Change Your Thinking> ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 1 #include <signal.h> 2 void (*signal(int signo, void (*fun

Linux 信号signal处理机制(ZZ)

http://www.cnblogs.com/taobataoma/archive/2007/08/30/875743.html 信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断.从它的命名可以看出,它的实质和使用很象中断.所以,信号可以说是进程控制的一部分. 一.信号的基本概念 本节先介绍信号的一些基本概念,然后

LINUX 信号概念详解

LINUX 信号概念详解 我们运行如下命令,可看到Linux支持的信号列表: # kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP

Linux信号列表

我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) S

Linux信号(signal) 机制分析

[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等.最后介绍了应用层的相关处理,主要包括信号处理函数的安装.信号的发送.屏蔽阻塞等,最后给了几个简单的应用实例. [关键字]软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1       信

LINUX信号

一.产生信号的三种方式: 1.由键盘(终端按键)产生,比如在shell下启动一个前台进程(控制台下的进程),按Ctrl^C(只能发给前台进程)会产生一个硬件中断,若CPU正在执行此进程代码,则该进程用户空间代码暂停执行,CPU从用户态切换到内核态处理中断,如果不是自定义信号处理函数,一般默认的处理动作为终止进程,所以在内核态直接终止进程而不返回用户区. 2.由系统函数发送信号,可用kill命令给某个指定进程发送信号,它是调用kill函数实现的. 模型:kill -发送几号信号 给哪个进程 例:k