Kill 函数|学习笔记

简介: 快速学习 Kill 函数

开发者学堂课程【物联网开发- 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 ,父进程两秒之后就发了一个信号,子进程活不过两秒,第二秒的时候就被阻止。

 

相关文章
|
监控 Linux
Linux 进程标识符:深入探讨 getpid() 和 getppid()
在Linux操作系统中,进程管理是一项重要的任务。为了正确管理和监控进程,我们需要了解如何获取进程的标识符。本文将详细介绍两个重要的Linux系统调用函数:`getpid()`和`getppid()`。这两个函数用于获取当前进程的进程ID(PID)和父进程的PID。我们将深入探讨它们的用途、使用方法以及示例代码。
3054 0
|
10月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
414 25
|
存储 Linux
linux waitpid函数详解
linux waitpid函数详解
944 0
|
缓存 监控 算法
Linux内核的SLAB内存管理机制
Linux内核的SLAB内存管理机制
1080 4
|
数据可视化 应用服务中间件 nginx
Docker如何连接至本地私服Harbor中 推送镜像、查看镜像、下载镜像
Docker如何连接至本地私服Harbor中 推送镜像、查看镜像、下载镜像
1181 0
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
573 11
Redis集群模式:高可用性与性能的完美结合!
【进程控制】超详细讲解wait和waitpid的原理(结合代码)
【进程控制】超详细讲解wait和waitpid的原理(结合代码)
|
搜索推荐 大数据 定位技术
数仓治理:数据地图长什么样?
最近在做数据治理相关的工作,说下数据治理里面很重要的一块,同时也可以作为数据治理的一个成果—数据地图。
994 0
|
存储 监控 Linux
MinIO分布式部署
MinIO使用纠删码( Erasure Coding)来做数据的备份和数据恢复,
1623 1
|
人工智能 IDE Java
IntelliJ IDEA 2023.2 主要更新了什么?(纯文本介绍版)
IntelliJ IDEA 2023.2 主要更新了什么?(纯文本介绍版)
278 1