![](/img/trans.png)
[英]Can I use non-blocking sockets to send FDs from one process to another using “sendmsg/recvmsg”?
[英]In Linux, I'm looking for a way for one process to signal another, with blocking
我正在尋找一個簡單的事件通知系統:
進程A阻塞,直到得到...的通知
流程B,觸發流程A。
如果我在Win32中執行此操作,則可能會使用事件對象(“ B”執行SetEvent時使用“ A”塊)。 我需要一些快速而又骯臟的東西(最好是腳本而不是C代碼)。 您會建議什么樣的事情? 我想知道文件咨詢鎖,但看起來很亂。 進程之一必須主動打開文件才能持有鎖。
又快又臟?
然后使用fifo 。 這是一個命名管道。 進程A從具有阻塞模式的fifo FD讀取。 進程B在需要時向其寫入。
確實如此。
這是bash腳本實現:
程序A:
#!/bin/bash
mkfifo /tmp/event
while read -n 1 </tmp/event; do
echo "got message";
done
程式B:
#!/bin/bash
echo -n "G" >>/tmp/event
首先啟動腳本A,然后在另一個外殼程序窗口中重復啟動腳本B。
除了fifo之外,您還可以使用信號和kill來進行中斷,並使一個進程進入睡眠狀態,直到它收到諸如SIGUSR1之類的信號,然后將其解除阻塞(您可以使用條件變量輕松實現此目的而無需輪詢)。
慢又干凈?
然后使用(命名)信號燈:POSIX或SysV(不建議使用,但可能更便於攜帶)。 進程A執行sem_wait
(或sem_timedwait
),進程B調用sem_post
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.