簡體   English   中英

當等待進程(在信號量隊列中)接收到來自另一個進程的信號時會發生什么?

[英]What happened when a waiting process (in semaphore queue) receives a signal from another process?

我正在做一個學校項目:我必須管理許多流程。 在它們由父級(wht fork())生成並使用 execve 啟動后,它們必須相互通信並且它們工作得很好。 該項目包括2個文件。c,一個是父親(創建孩子),另一個是孩子的代碼。 當我有許多想要訪問關鍵部分的排隊和等待進程(我決定在其中實現互斥信號量)時,就會出現問題

代碼類似於:

 decrease_semaphore

 //start critical section

 kill(pid,signal)  /*try to send a signal to a probably queuing  process at the same semaphore*/
 increase_semaphore
 //end of critical section

發送的信號由我編寫的處理程序捕獲。

那么,信號發送到的排隊過程會發生什么? 他是否收到它並離開等待隊列,執行處理程序?

還是它留在隊列中並在它設法訪問關鍵部分后執行處理程序?

抱歉有任何不准確之處,我最近開始寫 c :)

如果您正在使用“sem_wait”,並且接收到信號(並且未被阻塞),則 sem_wait 將返回 -1 並將 errno 設置為 EINTR。 這可用於區分其他故障(例如,ETIMEDOUT)。

暫無
暫無

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

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