zoukankan      html  css  js  c++  java
  • Linux下Kill函数用法

    来源:http://www.cnblogs.com/winnxm/archive/2010/01/22/1654502.html

    #include <sys/types.h>
    
    #include <signal.h>
    
    int kill(pid_t pid, int sig);

    参数:
    pid:可能选择有以下四种

    1. pid大于零时,pid是信号欲送往的进程的标识。
    2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。
    3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。
    4. pid小于-1时,信号将送往以-pid为组标识的进程。

    sig:准备发送的信号代码,假如其值为零则没有任何信号送出,但是系统会执行错误检查,通常会利用sig值为零来检验某个进程是否仍在执行。

    返回值说明: 成功执行时,返回0。失败返回-1,errno被设为以下的某个值 EINVAL:指定的信号码无效(参数 sig 不合法) EPERM;权限不够无法传送信号给指定进程 ESRCH:参数 pid 所指定的进程或进程组不存在

    代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <sys/wait.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    
    int main( void )
    {
        pid_t childpid;
        int status;
        int retval;
        
        childpid = fork();
        if ( -1 == childpid )
        {
            perror( "fork()" );
            exit( EXIT_FAILURE );
        }
        else if ( 0 == childpid )
        {
            puts( "In child process" );
            sleep( 100 );//让子进程睡眠,看看父进程的行为
            exit(EXIT_SUCCESS);
        }
        else
        {
            if ( 0 == (waitpid( childpid, &status, WNOHANG )))
            {
                retval = kill( childpid,SIGKILL );
                
                if ( retval )
                {
                    puts( "kill failed." );
                    perror( "kill" );
                    waitpid( childpid, &status, 0 );
                }
                else
                {
                    printf( "%d killed
    ", childpid );
                }
                
            }
        }
        
        exit(EXIT_SUCCESS);
    }
    //-----------------
    [root@localhost src]# gcc killer.c
    [root@localhost src]# ./a.out
    In child process
    4545 killed
    kill 使用示例

    在确信fork调用成功后,子进程睡眠100秒,然后退出。
    同时父进程在子进程上调用waitpid函数,但使用了WNOHANG选项,
    所以调用waitpid后立即返回。父进程接着杀死子进程,如果kill执行失败,
    返回-1,否这返回0。如果kill执行失败,父进程第二次调用waitpid,
    保证他在子进程退出后再停止执行。否则父进程显示一条成功消息后退出。

  • 相关阅读:
    Python
    Python
    Python
    #2035:人见人爱A^B
    #2030:汉字统计--统计给定文本文件中汉字的个数
    #2028:Lowest Common Multiple Plus(n个数的最小公倍数)
    幂次方的四种快速取法(不使用pow函数)
    爬楼梯:经典动态规划+递归法
    最小生成树算法【图解】:一文带你理解什么是Prim算法和Kruskal算法
    KMP算法-从头到尾彻底理解KMP
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/3370234.html
Copyright © 2011-2022 走看看