Жизненный цикл семафоров Linux

У меня есть старая программа C++ STL 11, которая использует семафор и общую память. Он работает уже много лет как часы (Debian 7). Он выполняется под root.

Теперь я перешел на новый сервер (Debian 9), и он работает под пользователем без полномочий root.

Программа запускается в фоновом режиме с помощью nohup и &.

Как только я выхожу из системы в новой среде, семафор исчезает (больше не отображается в ipcs). Но общая память по-прежнему доступна и процесс также выполняется, чего я не понимаю. Почему не все IPC-элементы обрабатываются одинаково?

Любые идеи для этого??

EDIT Если я запускаю его с помощью sudo, семафор принадлежит пользователю root и существует, даже если я выхожу из системы.


person chris01    schedule 25.04.2020    source источник


Ответы (1)


Любой процесс, запущенный оболочкой в ​​фоновом режиме, получит сигнал SIGHUP при выходе из системы. Если ваш процесс не справится с этим, он будет завершен.

Если вы хотите сохранить процесс, запущенный таким образом, вы можете либо использовать встроенную оболочку disown, чтобы избежать этого, либо запустить процесс с помощью nohup.

Причина, по которой это удается, когда вы запускаете его от имени пользователя root, заключается в том, что ваш непривилегированный пользователь не может сигнализировать процессу, принадлежащему root, и поэтому попытка оболочки сделать это не удается.

Семафор в данном случае является отвлекающим маневром.

person bk2204    schedule 25.04.2020
comment
Он запускается с помощью nohup и не завершается после выхода из системы. Семафор удален. Но процесс все равно идет и общая память не удаляется. - person chris01; 26.04.2020