开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:Kill 函数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11008
Kill 函数
kill 函数
对信号有一定了解之后学习函数,函数可以产生信号,进程给进程发信号。
1、通过 kill 函数进行发信号
可以通过 kill 函数进行发信号
#include <sys/types.h>
#include <signal.h>
int kill(pid t pid, int signum);
kill 函数第一个参数是进程号,第二个参数是信号的编号,给pid进程发送signum信号。
功能:
给指定进程发送信号。
参数:
pid:详见下页
signum:信号的编号
返回值:
成功返回 0 ,失败返回 -1。
2、pid 的取值
pid 的取值有 4 种情况:
pid>0:将信号传送给进程 ID为 pid 的进程。
正常情况下,使用 pid>0的情况,指定进程号就可以。
pid=0:将信号传送给当前进程所在进程组中的所有进程。
pid=0运行一个进程时,产生的进程同属于一个进程组,kill 传递会给进程组所有进程发信号
pid=-1:将信号传送给系统内所有的进程。
只能给同一用户的所有进程发信号,不能给所有进程广播一个信号。
pid<-1:将信号传给指定进程组的所有进程。这个进程组号等于 pid 的绝对值。
例如:pid<-100时给进程组号为100的进程组内所有进程发信号。
例:01_kill.c 父进程给子进程发送信号
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
int main (int argc, char *argv[])
{
pid_t pid;
pid = fork();
If(pid<0)
perror(" fork");
if(pid==0)
{
int i = 0;
for(i=0; i<5; i++)
{
printf("in son process\n");
sleep(1);
}
else
{
printf("in father process\n");
sleep(2);
printf("kill sub process now \n");
kill (pid, SIGINT);
}
Return 0;
}
创建一个子进程之后拥有两个父子进程,经过一段时间,父进程给子进程发送一个信号,把子进程搬过来。
在程序当中 fork 创建一个子进程,在子进程里面 for 循环5秒,每一秒打印一条 in son process ,父进程打印一句话睡两秒。一旦运行这个程序,子进程在循环父进程先睡两秒。
子进程创建五秒之后,父进程 kill sub process now (杀死子进程),方法为调到 kill 函数传子进程的进程号 pid 进去,传二号信号 SIGINT ,父进程两秒之后就发了一个信号,子进程活不过两秒,第二秒的时候就被阻止。