Linux 程序間通訊 訊號

2021-06-18 07:26:21 字數 2062 閱讀 1121

訊號是在軟體層次上對中斷機制的一種模擬,在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的。訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。

訊號是程序間通訊機制中唯一的非同步通訊機制,可以看作是非同步通知,通知接收訊號的程序有哪些事情發生了。

程序可以通過三種方式來響應乙個訊號:

(1)忽略訊號,即對訊號不做任何處理,其中,有兩個訊號不能忽略:sigkill及 sigstop;

(2)捕捉訊號。定義訊號處理函式,當訊號發生時,執行相應的處理函式;

(3)執行預設操作;

#include #include #include void new_op(int,siginfo_t*,void*);

int main(int argc,char**argv)

int count=0;

while(1)

return 0;

}void new_op(int signum,siginfo_t* info,void* myact)

後台執行 sigreceive signo &,可獲得該程序的 id,假設為 pid,然後再另一終端上執行 kill -s signo pid 驗證訊號的傳送接收及處理.

#include #include #include void new_op(int sig,siginfo_t* info,void* act)

printf("\nhandle sig:%d\n",sig);

}int main(int argc,char** argv);

mysigval.sival_ptr=data;

sig=atoi(argv[1]);

sigemptyset(&act.sa_mask);

act.sa_sigaction=new_op;

act.sa_flags=sa_siginfo;

if(sigaction(sig,&act,null)<0)

// int count=0;

// while(1)

return 0;

}

sig_send.c

#include #include #include int main(int argc,char** argv);

// char** data = (char**)malloc(sizeof(char* )*2);

// data[0] = "first";

// data[1] ="second";

// char* data[2]=;

// sigv.sival_ptr=data;

char data[2]=;

// sigv.sival_ptr=data;

sigv.sival_int=9;

pid_t pid=atoi(argv[1]);

int sig=atoi(argv[2]);

sigqueue(pid,sig,sigv);

printf("message has been send\n");

sleep(7);

printf("send dead\n");

return 0;

}

sig_rev.c

#include #include #include void op(int sig,siginfo_t *info,void* sigact)

}int main(int argc,char** argv)

int count=0;

while(1)

return 0;

}

注:例項 2 的兩個例子側重點在於用訊號來傳遞資訊,目前關於在 linux 下通過訊號傳遞資訊的例項非常

少,倒是 unix 下有一些,但傳遞的基本上都是關於傳遞乙個整數,傳遞指標的我還沒看到。我一直沒有實

現不同程序間的指標傳遞(實際上更有意義),也許在實現方法上存在問題吧

參考鄭彥興《linux程序通訊》

Linux程序間通訊 訊號

1.什麼是訊號 訊號是linux系統響應某些條件而產生的乙個事件,接收到該訊號的程序會執行相應的操作。2.訊號的產生 1 由硬體產生,如從鍵盤輸入ctrl c可以終止當前程序 2 由其他程序傳送,如可在shell程序下,使用命令 kill 訊號標號 pid,向指定程序傳送訊號。3 異常,程序異常時會...

Linux程序間通訊 訊號

訊號 signals 是unix 類unix以及其他posix相容的作業系統中程序間通訊的一種有限制的方式。它是一種非同步的通知機制,用來提醒程序乙個事件已經發生。當乙個訊號傳送給乙個程序,作業系統中斷了程序正常的控制流程,此時,任何非原子操作都將被中斷。如果程序定義了訊號的處理函式,那麼它將被執行...

linux程序間通訊 七 訊號通訊

在之前的博文 linux程序間通訊 一 初識篇 中,我們知道了程序間通訊主要分為三大類,分別是管道通訊,訊號通訊,以及ipc通訊 程序間通訊主要是為了不同程序之間的資料共享,訊號通訊也不例外。1 什麼是訊號通訊,或者說什麼是訊號機制?訊號是軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式。通常如...