Linux Семафор Жизненный цикл - PullRequest
0 голосов
/ 25 апреля 2020

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

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

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

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

Есть идеи для этого ??

РЕДАКТИРОВАТЬ Если я начну с sudo, семафор будет принадлежит root и существует, даже если я выйду из системы.

1 Ответ

1 голос
/ 25 апреля 2020

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

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

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

Семафор, в данном случае, красная сельдь.

...