歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux下Kill的用法

[ KILL ]功能描述:

用於向任何進程組或進程發送信號。

頭文件用法:

#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 所指定的進程或進程組不存在
#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\n", childpid );
             }
            
         }
     }
    
     exit(EXIT_SUCCESS);
 }
 //-----------------
 [root@localhost src]# gcc killer.c
 [root@localhost src]# ./a.out
 In child process
 4545 killed

在確信fork調用成功後,子進程睡眠100秒,然後退出。同時父進程在子進程上調用waitpid函數,但使用了WNOHANG選項,所以調用waitpid後立即返回。父進程接著殺死子進程,如果kill執行失敗,返回-1,否這返回0。如果kill執行失敗,父進程第二次調用waitpid,保證他在子進程退出後再停止執行。否則父進程顯示一條成功消息後退出。

Copyright © Linux教程網 All Rights Reserved