歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下Kill的用法

Linux下Kill的用法

日期:2017/2/28 15:35:03   编辑:Linux教程

[ 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