Linux信号灯生命周期

问题描述 投票:0回答:1

我有一个使用信号灯和共享内存的旧C ++ STL 11程序。它运行多年,就像一种魅力(Debian 7)。它在根目录下执行。

现在我迁移到新服务器(Debian 9),它在非root用户下运行。

程序在后台以&启动。

我在新环境中注销后,信号量消失了(ipcs时不再列出)。但是共享内存仍然可用,并且我不了解该过程也已执行。为什么不是所有IPC元素都以相同的方式处理?

有什么想法吗?

编辑如果我以sudo开头,则即使我注销该信号量也归root所有并存在。

linux ipc semaphore
1个回答
0
投票

注销时,任何由Shell在后台启动的进程都会得到SIGHUP。如果您的进程不处理该进程,它将终止。

[如果要保留以此方式启动的进程,则可以使用内置的disown shell来避免这种情况,也可以使用nohup启动该进程。

当您以root身份运行时成功的原因是,您的非特权用户无法发出root拥有的进程的信号,因此shell尝试这样做的尝试无声地失败。

在这种情况下,信号量是红色鲱鱼。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.