05多程序間使用訊號進行通訊

2021-08-28 07:08:53 字數 1990 閱讀 6084

#include #include #include #include #include #include #include #include #if 1

/*要求:

3、訊號可靠訊號不可靠訊號相關

程式設計程式,要去實現如下功能:

父程序建立子程序1和子程序2、子程序1向子程序2傳送可靠訊號,

並傳送額外資料為子程序1的pid*2;

子程序2接受可靠訊號的值,並傳送給父程序,父程序把接受的值

進行列印。

分析: 1因為孩子1的pid和孩子2的pid全部在父程序中

2父程序把孩子2的pid,發給孩子1

3孩子1有了孩子2的pid,孩子1就可以給孩子2傳送訊號了。

父--->子1---->子2---->父

*/// kill -l 檢視訊號

int pidarray[10];//使用全域性變數快取子程序id

void myhandle(int num, siginfo_t *st, void *p)

//子程序2接收到了訊號

if(num == sigrtmin+2)

//父程序接收到了訊號

if(num == sigrtmin+3)

}int test()

if(sigaction(sigrtmin+2, &act, null) == -1)

if(sigaction(sigrtmin+3, &act, null) == -1)

int pid = 0;

//連續建立2 個子程序

for (i = 0; i < 2; i++)

else if (pid > 0)

} //子程序1向子程序2傳送 子程序1的pid*2

if (pid == 0 && i == 0)

printf("子程序1給子程序2發完訊號啦,即將退出........\n");

exit(0); }

//子程序2 向父程序傳送訊號

if (pid == 0 && i == 1)

printf("子程序2給父程序發完訊號啦,即將退出........\n");

exit(0);

}

//父程序向子程序1傳送子程序2的pid

if (pid > 0)

printf("父程序給子程序1發完訊號啦........\n");

}sleep(2);

int mypid = 0;

//非阻塞等待所有的子程序退出

進行單獨測試父子程序通訊,並沒有出現以上問題

#if 0

void myhandle(int num, siginfo_t *st, void *p) }

int test()

int pid = 0;

pid = fork();

//子程序給父程序傳送訊號

if (pid == 0)

exit(0); }

sleep(2);

int mypid = 0;

//非阻塞等待所有的子程序退出

程序間使用共享記憶體作程序通訊

共享記憶體是system v版本的最後乙個程序間通訊方式。共享記憶體,顧名思義就是允許兩個不相關的程序訪問同乙個邏輯記憶體,共享記憶體是兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間共享的記憶體通常為同一段物理記憶體。程序可以將同一段物理記憶體連線到他們自己的位址空間中,所有...

程序之間使用佇列Queue 通訊

多程序之間通訊可以使用multiprocessing中的queue 來完成,下面簡單介紹一下queue 裡面的函式及功能 初始化queue 物件時 例如 q queue 若括號中沒有指定最大可接收的訊息數量,或數量為負值,那麼就代表可接受的訊息數量沒有上限 直到記憶體的盡頭 1 如果block使用預...

PHP 多程序通訊 訊息佇列使用

向訊息佇列傳送資料和獲取資料的測試 key ftok file a 獲取訊息佇列 queue msg get queue key,0666 傳送訊息 msg send queue,1,hello,1 接收訊息,如果接收不到會阻塞 msg receive queue,1,message type,10...