zoukankan      html  css  js  c++  java
  • kill函数

    kill函数/命令产生信号

    kill命令产生信号:kill -SIGKILL pid

    kill函数:给指定进程发送指定信号(不一定杀死)

        int kill(pid_t pid, int sig);      成功:0;失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno

           sig:不推荐直接使用数字,应使用宏名,因为不同操作系统信号编号可能不同,但名称一致。

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

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

           pid < 0:  取|pid|发给对应进程组。

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

        进程组:每个进程都属于一个进程组,进程组是一个或多个进程集合,他们相互关联,共同完成一个实体任务,每个进程组都有一个进程组长,默认进程组ID与进程组长ID相同。

    权限保护:super用户(root)可以发送信号给任意用户,普通用户是不能向系统用户发送信号的。 kill -9 (root用户的pid)  是不可以的。同样,普通用户也不能向其他普通用户发送信号,终止其进程。 只能向自己创建的进程发送信号。普通用户基本规则是:发送者实际或有效用户ID == 接收者实际或有效用户ID

    /***
    killmyself.c
    ***/
    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<signal.h>
    
    #define N 5
    
    int main()
    {
        int ret = kill(getpid(),SIGKILL);
        if(-1 == ret)
            exit(1);
    
        return 0;
    }

    kill杀死指定子进程:

    /***
    killkid.c
    ***/
    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<signal.h>
    
    #define N 5
    
    int main()
    {
        int i;
        pid_t pid,q;
    
        for(i = 0; i < N; i++)
        {
            pid = fork();
            if(0 == pid)
                break;
            if(2 == i)
            {
                q = pid;
            }
        }
        
        if(i < 5)
        {
            while(1)
            {
                printf("I'm a child %d,getpid = %u
    ",i,getpid());
                sleep(1);
            }
        }
        else
        {
            kill(q,SIGKILL);
            while(1);
        }
    
        return 0;
    }

    运行结果中,第一轮由i = 2 的孩子,后面的都不会有该孩子了。

     

  • 相关阅读:
    Vue 获取dom元素中的自定义属性值
    php文件包含
    php数组运算符
    管理一组事物的状态
    php数据类型转换
    php函数
    PHP循环while do while循环
    php的流程控制 if elseif swich case for循环
    php的工作原理
    python算数、逻辑运算,位运算
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11320878.html
Copyright © 2011-2022 走看看