Linux 信号(一)—— kill 函数,linuxkill


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

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 环境高级编程》

相关内容