Posted on 2009-02-17 17:50
Prayer 閱讀(6138)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
kill(傳送信號給指定的進程)
表頭文件
#include<sys/types.h>
#include<signal.h>
定義函數 int kill(pid_t pid,int sig);
函數說明
kill()可以用來送參數 sig 指定的信號給參數 pid 指定的進程。參數 pid 有幾種情況:
pid>0 將信號傳給進程識別碼為 pid 的進程。
pid=0 將信號傳給和目前進程相同進程組的所有進程
pid=-1 將信號廣播傳送給系統內所有的進程
pid<0 將信號傳給進程組識別碼為 pid 絕對值的所有進程
返回值 執行成功則返回 0,如果有錯誤則返回-1。
EINVAL 參數 sig 不合法
錯誤代碼 ESRCH 參數 pid 所指定的進程或進程組不存在
EPERM 權限不夠無法傳送信號給指定進程
#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,
保證他在子進程退出后再停止執行。否則父進程顯示一條成功消息后退出。
本文來自: (www.91linux.com) 詳細出處參考:http://www.91linux.com/html/article/program/20071017/7635.html