2017-01-06 7 views
1

Возможно, мой вопрос слишком глубок в этом вопросе, и я думаю о проблеме, которая не существует. Я надеюсь, что вы можете помочь. ;-) Проблема заключается в следующем: Я запускаю процесс в Linux при запуске (rc.d), который затем создает общую память и разворачивает два процесса демона. Демон, отделившись от родительских процессов, унаследовали разделяемую память родительского процесса, но также имеют собственный сеанс и больше не связаны с родителем. Есть ли у них собственная связь с разделяемой памятью и подсчитывает ли ядро ​​ссылки? Я спрашиваю, потому что я хотел бы безопасно отсоединить родительский процесс, прежде чем он выйдет из строя. В моей реализации это работает, разделяемая память отделяется родительским процессом, но демоны все еще могут ее использовать. Но это безопасно или просто по совпадению ??Безопасный шлем отсоединяется для материнского процесса

Спасибо за ваши мысли заранее!

Martell

ответ

2

В Linux каждый процесс имеет индекс дескрипторов в File Descriptor Table, файл в файловом дескрипторе таблицы для каждого процесса поддерживается ядром, что в свою очередь, индексы в общесистемной таблице файлов, открываемых всеми процессами, называется файловой таблицей.

Теперь в fork каждый из дочерних процессов будет иметь свой собственный FD и каждую запись, указывающую на те же объекты, что и в родительском процессе. Поэтому, если родительский процесс закрывает свой индекс общей памяти в своем FD, это не повлияет на другие процессы, так как ОС не будет закрывать эту общую память, поскольку она все еще используется различными процессами. (Другими словами, дочерние процессы все еще привязаны к этому S.M и имеют ссылку на него, и ОС подсчитывает их)

+1

Спасибо, это отвечает на мой вопрос. – Martell