【C語言】利用kill函數實現一個進程向另一個進程發送信號

一、 kill函數


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

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


2. 參數: 
pid:可能選擇有以下四種

    1. pid大於零時,pid是信號欲送往的進程的標識。
    2. pid等於零時,信號將送往所有與調用kill()的那個進程屬同一個組的進程。
    3. pid等於-1時,信號將送往所有調用進程有權給其發送信號的進程,除了進程1(init)。
    4. pid小於-1時,信號將送往以-pid爲組標識的進程。

sig:準備發送的信號代碼,假如其值爲零則沒有任何信號送出,但是系統會執行錯誤檢查,通常會利用sig值爲零來檢驗某個進程是否仍在執行。

返回值說明: 成功執行時,返回0;失敗返回-1


二、 示例說明


1.  kill_process_01.c 實現等待接收信號

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

char acProcessName[32];

void sig_handler(int signo);
int main(int argc, char **argv)
{
    snprintf(acProcessName, sizeof(acProcessName), "%s", argv[0]);
    printf("\n [%s] main is waiting for a signal\n", acProcessName);
    if(signal(SIGUSR1,sig_handler) == SIG_ERR){
        perror("signal errror");
        exit(EXIT_FAILURE);
    }
    for(; ;);//有時間讓我們發送信號

    return 0;
}

void sig_handler(int signo)
{
    printf("\n [%s] catch the signal SIGUSR1 %d\n", acProcessName, signo);
    exit(EXIT_FAILURE);
}

2. kill_process_02.c 實現向指定進程號發送信號

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>

char acProcessName[32];

int main(int argc, char **argv)
{
	snprintf(acProcessName, sizeof(acProcessName), "%s",  argv[0]);
	
	int pid = 0;
	if (argc != 2)
	{
			printf("%s [pid_number]\n", argv[0]);
			return -1;
	}
	pid = atoi(argv[1]);
	kill(pid, SIGUSR1);
	printf("[%s] pid = %d\n", acProcessName, pid);
	
	return 0;
}

3.  運行結果

1》 執行./kill_process_01 & 
 [./kill_process_01] main is waiting for a signal

2》 查看kill_process_01進程號爲 2853

3》 執行./kill_process_02 2853
[./kill_process_02] pid = 2853
[./kill_process_01] catch the signal SIGUSR1 10




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章