我試圖在Linux上使用POSIX IPC建立兩個不同進程之間的通信。我正在使用基於這個庫http://semanchuk.com/philip/posix_ipc/的posix消息隊列的python 3。Python POSIX IPC - 作爲不同用戶運行的進程之間的通信
問題是我想在作爲根運行的服務器和以普通用戶權限運行的客戶端(單獨的python程序)之間進行通信。
如果客戶端創建消息隊列,那麼它工作,大概是因爲它分配在一個普通的用戶下,並且在根下運行的進程具有更高的權限。然而,我希望服務器創建消息隊列,因爲它可以在服務器終止時正確管理消息隊列的關閉等。
根進程是否可以創建IPC消息隊列並允許進程在不同的用戶寫入隊列?如果是這樣如何?
或者是否有其他可替代使用的POSIX IPC(例如Sys V)? 我希望避免使用UNIX套接字,因爲我不想使用額外的開銷。
- 更新的最新嘗試 -
我所有的文件我能找到閱讀起來。圖書館自述說,他們發現無論權限如何都可以工作,但那不是我的經驗。
Linux編程接口(庫所依賴的)聲明同時使用mode和umask,但即使我在消息隊列設置中使用os.umask(000),然後是mode = 666,我仍然獲得權限被拒絕客戶端。
我不想使用套接字的原因是因爲這將用於處理傳入的Web請求,然後需要將它傳遞到最終服務器。如果使用域套接字,那麼每個Web請求都需要建立到套接字的連接,在釋放套接字並返回之前發送請求並接收響應。 而如果我使用了一個消息隊列,它可以獲得內存地址,將消息添加到隊列中,然後檢查響應(如果需要)。 –
@StewartWatkiss爲每封郵件打開新套接字是不必要的。數據報套接字上的寫入是原子的,所以你可以保留一個連接的套接字,在任何數量的生產者/消費者之間共享。或者一個插座池。 – user1643723
謝謝。我打算給套接字一個去。如果隊列已經工作,那麼他們會更適合我希望通信如何工作,但我已經嘗試了許多不同的方式來獲得權限,同時使用sysV和posix隊列沒有任何成功。我需要改變我的代碼將消息排隊以將其更改爲套接字的方式,但這可能比在消息隊列上多花時間更好。 –