【发布时间】:2011-12-15 07:10:34
【问题描述】:
我有一个用 c++ 编写的 linux 应用程序。 应用程序侦听某个端口上的套接字。我使用 ACE Acceptor 实现了这一点。 此外,应用程序使用初始化脚本 /etc/init.d/postgresql start 通过调用 ACE_OS::system 函数来启动 postgresql 数据库。
我遇到的问题是:当应用程序退出时,端口仍然被占用。当我运行 netstat 时,我看到 postgres 正在侦听该端口。 (这只发生在我从任何给定端口上的应用程序启动 postgres 时)。
有没有办法关闭端口?为什么 postgres 监听那个端口?
【问题讨论】:
-
你的问题实际上不是如何停止 postgres 吗?
-
@MichaelKrelin-hacker,不一定。该应用程序可能是一个命令/响应服务器,作为其操作之一,它启动系统的数据库。这表明(以 root 身份运行、将资源泄漏给子进程等)是另一回事。 :)
-
但是它说“我看到 postgres 正在监听那个端口”?
-
是的,因为 postgres 继承了 OP 应用程序打开的套接字。如果应用程序在启动 postgres 之前也打开了
/dev/null并创建了一个pipe(),lsof将表明后代 postgres 也持有/dev/null和一个pipe()。 -
呃,我希望这是一些系统管理应用,否则在你的应用中启动 postgres 听起来很不对。
标签: c++ sockets postgresql port ace