爲了允許進程間通信,我必須在SOLARIS 9 SPARC上的C上實現一些機制。UNIX上的進程間通信
簡而言之,我必須實現一個多線程程序,其中線程的父親一旦收到信號或任何你想要的,必須觸發一組負責加密文件的線程。
我無法使用某些TCP套接字解決方案與此程序進行通信。
我正在考慮使用系統信號(並通過kill -s SIGNAL PID觸發進程)或域unix套接字。
您認爲如何?你能建議我一些其他解決方案嗎?
爲了允許進程間通信,我必須在SOLARIS 9 SPARC上的C上實現一些機制。UNIX上的進程間通信
簡而言之,我必須實現一個多線程程序,其中線程的父親一旦收到信號或任何你想要的,必須觸發一組負責加密文件的線程。
我無法使用某些TCP套接字解決方案與此程序進行通信。
我正在考慮使用系統信號(並通過kill -s SIGNAL PID觸發進程)或域unix套接字。
您認爲如何?你能建議我一些其他解決方案嗎?
其他解決方案:共享內存段,流水線,Unix套接字(嘿,他們不是TCP :)),...
如果我明白你的問題,看看POSIX message queues,特別mq_notify()。您可以通過消息隊列進行通信,並將其設置爲在收到消息時自動產生線程。該線程讀取隊列中的文件名和其他內容並進行加密。
您怎麼看?你能建議我一些其他解決方案嗎?
信號是一個非常好的解決方案,比許多簡單。我可能會自己使用它。其他大多數更改主機環境會使流程活躍起來,並且/或者使得難以同時運行多個系統副本(因爲您必須自己管理不同的文件名,端口號,共享內存ID等,而OS已經跟蹤PID並允許它們作爲殺死目標)。
不過,如果您想要另一個選項,命名管道非常非常易於使用。在你的shell中,只需「mkfifo xyz」在當前目錄下創建一個名爲「xyz」的管道。然後你可以讓你想要發信號的線程讀取管道,然後echo "go boy go" > xyz
進入管道,你的控制線程將退出read()。
我發現你的問題不完全清楚。這些「正義」進程還是這些POSIX線程都是由同一進程創建的? – 2010-09-26 17:21:27
有一個進程X管理多線程......還有一些其他進程或UNIX命令必須觸發進程X – Kerby82 2010-09-26 17:52:44