信号(三)Kill函数和Kill命令

一、Kill命令

    1、Kill命令: kill -信号编号/信号名 pid

    2、Kill命令其实是用来发送信号的,我们常用的Kill -9 pid只是给某个进程发送9号信号而已,而不是说杀死该进程。

 二、Kill函数

    1、作用:给指定进程发送指定信号。(不一定会杀死进程,取决于发送的是什么信号)

    2、函数原型、返回值(man 2 kill 查看)

        ①函数原型:int kill(pid_t pid, int sig);

       ②返回值:On success (at least one signal was sent), zero is returned.  On error, -1 is returned, and errno is set appropriately.(ID非法、信号非法、普通用户杀死root用户进程)

    3、函数参数

        ①pid:指定进程的进程ID,注意用户的权限,比如普通用户不可以杀死1号进程(init)。

                pid>0:发送信号给指定进程

                pid=0:发送信号给与调用kill函数进程属于同一进程组的所有进程

                pid<0:发送信号给pid绝对值对应的进程组

                pid=-1:发送给进程有权限发送的系统中的所有进程

        ②sig:对于sig参数,建议使用信号名(宏名)而不是信号编号,因为涉及到跨平台的程序时,可能因为不同平台信号编号不同会导致错误。

    4、进程组:进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号。每个进程组都有一个组长,进程组的ID和进程组长ID一致。

    5、权限保护:root用户可以发送信号给任何用户,而普通信号不可以向系统用户(的进程)或者其他普通用户(的进程)发送任何信号。普通用户只可以向自己创建的进程发送信号。


三、思考:在命令行执行:cat|cat|cat|cat时,如果杀死第一个cat为什么后面的cat也会关闭?

    答:因为第一个cat被杀死后,管道的写端就关闭了,第二个cat读不到数据就返回0,继而关闭,后面的cat类似。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值