簡體   English   中英

從父母向特定孩子發送信號

[英]Send signal from parent to specific child from

我有一個有一個父母和兩個孩子的樹進程,我想發送一個信號,只有child2接收它,為child2做一個處理程序,並在處理程序中接收到它時顯示一條消息。

pid_t pid, pid1, pid2;

if((pid=fork())==0)
printf("child1");
 else if((pid2=fork())=0)
   printf("child2);
   signal(SIGUSR1, handler); //EDITED
   else
     printf("parent");
     kill(pid2, SIGUSR1); //EDITED


void handler(int signal)
{
  printf("received");

但我不知道如何只為child2發送信號SIGUSR1

假設您的偽代碼的縮進表示嵌套深度,則現在原則上是正確的,但存在時序問題:

  • 父級可以在child2安裝信號處理程序之前將信號發送給child2。 為了解決這個問題,您可以讓父級在派生child2之前安裝處理程序(由子級繼承)。
  • child2可以在父級發送信號之前結束,因此不會調用該處理程序。 如果您希望看到它被調用,則可以給child2做些事情,即使它只是一個sleep(…)

我希望這是您實際問題的偽代碼。 在這種情況下,問題在於父母需要等到孩子實際安裝了處理程序。 這可以通過讓父母等到孩子發信號來實現(“告訴我,我已經准備好出發了”)。

在父代碼中有一個標記為bChildUp。 並等待

while (!bChildUp)
{
// do nothing till the child is up.
}

從child2向父進程發送信號。 接收信號的父進程可以將bChildUp = TRUE更改。 父級將退出等待,您的任務可以繼續(但是您可以通過使用siginfo_t獲取發送信號的進程的pid並使用sigaction來注冊信號來檢查信號是否確實來自child2)。

這些問題是由

  1. 擁有孩子創建的文件,父母知道孩子已成功創建。
  2. 或基於信令機制。

我建議在啟動后在child2中僅創建一個文件,然后讓父進程等待文件創建完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM