Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止监听端口 我有一个用C++编写的Linux应用程序。 应用程序侦听某个端口上的套接字。我使用ACE Acceptor实现了这一点。 此外,应用程序通过调用ACE_OS::system函数,使用init脚本/etc/init.d/postgresql start启动postgresql数据库_C++_Sockets_Postgresql_Port_Ace - Fatal编程技术网

如何停止监听端口 我有一个用C++编写的Linux应用程序。 应用程序侦听某个端口上的套接字。我使用ACE Acceptor实现了这一点。 此外,应用程序通过调用ACE_OS::system函数,使用init脚本/etc/init.d/postgresql start启动postgresql数据库

如何停止监听端口 我有一个用C++编写的Linux应用程序。 应用程序侦听某个端口上的套接字。我使用ACE Acceptor实现了这一点。 此外,应用程序通过调用ACE_OS::system函数,使用init脚本/etc/init.d/postgresql start启动postgresql数据库,c++,sockets,postgresql,port,ace,C++,Sockets,Postgresql,Port,Ace,我遇到的问题是:当应用程序退出时,端口仍然被占用。当我运行netstat时,我看到postgres正在侦听该端口。(只有在任何给定端口上从应用程序启动postgres时,才会发生这种情况) 有办法关闭港口吗?为什么博士后听那个端口 有办法关闭港口吗 对。关闭套接字,或在底层文件描述符上设置FD_CLOEXEC 或者。。。将对子进程(…postgresql start)的调用包装为将关闭高于stderr的fds的内容: ACE_OS::system("perl -MPOSIX -e 'POSIX:

我遇到的问题是:当应用程序退出时,端口仍然被占用。当我运行netstat时,我看到postgres正在侦听该端口。(只有在任何给定端口上从应用程序启动postgres时,才会发生这种情况)

有办法关闭港口吗?为什么博士后听那个端口

有办法关闭港口吗

对。关闭套接字,或在底层文件描述符上设置FD_CLOEXEC

或者。。。将对子进程(
…postgresql start
)的调用包装为将关闭高于stderr的fds的内容:

ACE_OS::system("perl -MPOSIX -e 'POSIX::close($_) for 3 .. sysconf(_SC_OPEN_MAX); exec @ARGV' /etc/init.d/postgresql start");
或类似的。把它塞进剧本里,让它看起来更好看

为什么博士后听那个端口


您的子进程(及其子女)继承了您的开放文件描述符,包括打开C++应用程序的套接字。

这不是你的问题,实际上是如何阻止PigGrice?@ Migelkrin黑客,不一定。该应用程序可能是一个命令/响应服务器,作为其操作之一,它可以启动系统的数据库。这意味着(以root用户身份运行、将资源泄漏给子进程等)还有其他方面的问题但上面写着“我看到postgres正在监听这个端口”?是的,因为postgres继承了OP应用程序打开的套接字。如果应用程序在启动postgres之前也打开了
/dev/null
并制作了一个
pipe()
lsof
将显示后代postgres也持有
/dev/null
和一个
pipe()
。呃,我希望这是一个系统管理应用程序,因为在应用程序中启动postgres听起来非常错误。有没有一种方法可以以不继承打开的文件描述符的方式启动子进程?@Shay,是的。要么在执行子级之前关闭描述符(close(the_right_fd)或fd_CLOEXEC),要么像perl代码片段那样循环fd表,希望一切顺利。