[英]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.