java的派生进程继承了FreeBSD上的父套接字



我有Spring(SprintBoot)应用程序,作为服务运行,并在FreeBSD上侦听端口80。

$ sockstat -4 -l | grep 80
root java 98931 30 tcp4 6 *:80 *:*

我正在从我的服务中启动另一个服务(例如,samba),如下所示:

Runtime.getRuntime().exec("/usr/sbin/service samba_server start")

然后得到这个:

$ sockstat -4 -l | grep 80
root smbd 99735 30 tcp4 6 *:80 *:*
root nmbd 99730 30 tcp4 6 *:80 *:*
root java 98931 30 tcp4 6 *:80 *:*

与其他服务相同。在杀死我的服务后,80号港口仍然被占领。为什么会发生这种情况?exec()是否使用具有完全资源继承的fork?

vfork/posix_spawn有帮助。将此库与java绑定一起使用https://github.com/axiak/java_posix_spawn

相关内容

最新更新