一个关于linux进程函数kill的问题

8 篇文章 0 订阅
2 篇文章 0 订阅
 

在linux下进程编程时调用KILL函数的时候,如果kill的是一个pid大于0的进程,那么实际效果就是kill掉了该pid的进程,但是注意下面一段代码

 pid_t pid;

       pid = get_pid_by_name("server");
 printf("pid:%d\n",pid);
       printf(" pid of server :%d \n",pid);
 kill(pid,SIGKILL);
有一个要注意的地方,就是get_pid_by_name这个函数(这也是一个手工编写的函数,通过遍历进程表来寻找参数所指定名称的程序所对应的进程的PID),要特别注意其返回值的判断。如果能在进程表里找到这个进程,当然程序可以正常运行下去,而如果没有找到的话则返回-1。由于代码处于调试阶段,所以我之前比较疏忽,没有判断返回值就直接调用kill(pid,SIGKILL),心想如果kill(-1,SIGKILL)无非就是找不到对应的进程id,然后kill失败,但事实证明结果是毁灭性的。。。。。在某嵌入式设备上运行这个程序的结果是,该设备直接断开和PC机的联系,且无法再连上,直到重装该设备的OS才解决。而把这段程序在UBUNTU上运行的结果则是,UBUNTU直接重启。。。

于是我再次查阅了kill函数的用法,果然很悲剧

定义函数 int kill(pid_t pid,int sig);

  函数说明

  kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:

  pid>0 将信号传给进程识别码为pid 的进程。

  pid=0 将信号传给和目前进程相同进程组的所有进程

  pid=-1 将信号广播传送给系统内所有的进程

  pid<0 将信号传给进程组识别码为pid绝对值的所有进程

 

当pid=-1时,将SIGKILL信号广播给了系统内所有进程。。。。后果自然可想而知。

所以,编写代码的时候,对于一些可能发生的错误,提前用代码处理一下是一个好习惯!

over

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值