複製鏈接
請複製以下鏈接發送給好友

kill()

鎖定
kill()是一個計算機編程語言函數,Kill函數可以對進程發送signal();
在linux裏使用的Kill命令。實際上是對Kill()函數的一個包裝;
函數名
kill
功 能
給指定進程發送指定信號
函數原型
int kill(pid_t pid, int sig);
表頭文件
#include <signal.h>#include <sys/types.h>
返回值
成功返回 0; 否則,返回 -1 

目錄

kill()程序例

編寫一個函數,功能是殺死另一個進程: [1] 
#include<stdio.h>    //printf()
#include<stdlib.h>    //exit()
#include<unistd.h>    //fork()
#include<signal.h>    
 
int main(int argc, char const *argv[])
{
    if(argc != 2)
    {
        printf("Please input pid\n");
        return 0;
    }
    int pid =1;
    sscanf(argv[1], "%d",  &pid);
    if(pid > 0)
    {
        kill(pid, SIGINT);
    }
    return 0;
}

kill()Linux C

信號發送函數—kill() [2] 
頭文件:#include <sys/types.h>#include <signal.h>
原型: int kill(pid_t pid,int signo)
功能
向進程或進程組發送一個信號 (成功返回 0; 否則,返回 -1 )
參數説明
pid:接收信號的進程(組)的進程號
pid>0:發送給進程號為pid的進程
pid=0:發送給當前進程所屬進程組裏的所有進程
pid=-1:發送給除1號進程和自身以外的所有進程
pid<-1:發送給屬於進程組-pid的所有進程
signo:發送的信號值
Signo = 0:不發送信號,可用於檢查目標進程是否存在,以及當前進程是否具有向目標進程發送信號的權限(root權限的進程可以向任何進程發送信號,非root權限的進程只能向屬於同一個session或者同一個用户的進程發送信號)。
信號值 1 - 31叫做不可靠信號 [3]  不支持排隊, 信號可能會丟失, 也叫做非實時信號。
34 - 64 叫做可靠信號,支持排隊, 信號不會丟失, 也叫做實時信號
比較常用的一些信號值
SIGHUP 1 A 終端掛起或者控制進程終止
SIGINT 2 A 鍵盤中斷(如break鍵被按下)
SIGQUIT 3 C 鍵盤的退出鍵被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)發出的退出指令
SIGFPE 8 C 浮點異常
SIGKILL 9 AEF Kill信號
SIGSEGV 11 C 無效的內存引用
SIGPIPE 13 A 管道破裂: 寫一個沒有讀端口的管道
SIGALRM 14 A 由alarm(2)發出的信號
SIGTERM 15 A 終止信號
SIGUSR1 30,10,16 A 用户自定義信號1
SIGUSR2 31,12,17 A 用户自定義信號2
SIGCHLD 20,17,18 B 子進程結束信號
SIGCONT 19,18,25 進程繼續(曾被停止的進程)
SIGSTOP 17,19,23 DEF 終止進程
SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵
SIGTTIN 21,21,26 D 後台進程企圖從控制終端讀
SIGTTOU 22,22,27 D 後台進程企圖從控制終端寫

kill()man手冊

SYNOPSIS
#include <signal.h>
int kill(pid_t pid, int sig);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
kill(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
DESCRIPTION
The kill() system call can be used to send any signal to any process
group or process.
參考資料