2013-04-01 2 views
0

Предположим, у меня есть родитель, который разворачивает ребенка. Затем разветвленный ребенок использует exec() для изменения образа процесса. И ребенок, и родитель теперь осуществляют активный обмен данными с использованием трубы. Я хочу синхронизировать этот обмен данными с помощью семафора. Из того, что я понимаю, я создам семафор в родительском элементе перед вилкой. Однако будет ли ребенок после того, как exec() сможет получить доступ к этому семафору? Если нет, есть ли другой способ, с помощью которого можно использовать семафор, чтобы установить синхронизацию?Семафоры Linux, разделенные между процессами forked-> exec'd?

ответ

1

exec man page От:
[SEM] Any named semaphores open in the calling process shall be closed as if by appropriate calls to sem_close().
Так после вызова EXEC, вы не можете достичь каких-либо открытых semephores в родителя.

Конечно, вам не нужно об этом беспокоиться, если вы хотите, чтобы два процесса делили семафор, просто используйте posix named semaphores.

Идея проста: вы создаете семафор в процессе и даете ему имя; другой процесс просто должен иметь имя, и тогда он может открыть этот семафор.

+0

спасибо. :) –

Смежные вопросы