Posix(realtime standard)即時標準。
RPC(Remote Procedure Call)遠端程序呼叫。
當多個thread的行程呼叫fork後,會讓沒有被命名的同步變數(mutex、條件變數、讀寫鎖定、及記憶體式的semaphore)變的一團混亂。
IPC種類 | fork() | exec() | exit() |
pipe與FIFO | 子行程將會取得所有父行程所開啟的描述子的被份。 | 除非子描述的FD_CLOEXEC位元為ON,否則所有已開啟的子描述仍然將保持在開啟之狀態。 | 所有已開啟的子描述會被關閉;如果這是最後的關閉者,則pipe或FIFO中的所有資料都會被移除。 |
Posix訊息佇列 | 子行程將會取得所有父行程所開啟之訊息佇列子描述的備份。 | 所有已開啟的訊息佇列子描述都會被關閉。 | 所有已開啟的訊息佇列子描述都會被關閉。 |
System V訊息佇列 | 沒有影響。 | 沒有影響。 | 沒有影響。 |
Posix mutex及條件變數 | 如果這些物件再共享記憶體中,而且有行程共享的屬性,則可被父子行程共享。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 |
Posix讀寫鎖定 | 如果這些物件再共享記憶體中,而且有行程共享的屬性,則可被父子行程共享。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 |
Posix記憶體式semaphore | 如果這些物件再共享記憶體中,而且有行程共享的屬性,則可被父子行程共享。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 | 除非這些物件在保持開放狀態且有行程共享屬性的共享記憶體中,否則會消失。 |
Posix命名式semaphore | 所有在父行程中已開啟的物件,在子行程中仍然維持開啟狀態。 | 所有已開啟的物件都會被關閉。 | 所有已開啟的物件都會被關閉。 |
System V semaphore | 在子行程中,所有semadj的值都會設為0。 | 所有semadj的值都會移植到新的程式去。 | 所有semadj的值都會加到對應的semaphore值上。 |
fnctl記錄鎖定 | 子行程不會繼承父行程所擁有的鎖定。 | 只要描述子維持開放狀態,鎖定就會維持不變。 | 行程所有進行中的鎖定都會被解除。 |
Mmap記憶體映射 | 子行程將保留所有父行程的記憶體映射。 | 記憶體映射會被解除。 | 記憶體映射會被解除。 |
Posix共享記憶體 | 子行程將保留所有父行程的記憶體映射。 | 記憶體映射會被解除。 | 記憶體映射會被解除。 |
System V共享記憶體 | 所有連結的共享記憶體區段都會被連結到子行程。 | 所有連結的共享記憶體區段都會被解除。 | 所有連結的共享記憶體區段都會被解除。 |
door | 子行程將取得所有父行程所開啟之子描述的備份,但只有父行程可作為以door子描述做door呼叫的伺服端。 | 所有的door子描述都應該要被關閉,因為它們開啟時都有設定FD_CLOEXEC位元。 | 所有子描述都應該要被關閉。 |
沒有留言:
張貼留言