c – 在Qt中启动一个独立的过程并处理端口
我可能对Qt的startDetached()如何工作有误解,但我正在目睹一个问题,我有一个作为远程启动器的应用程序.
启动器使用startDetached生成进程,我认为将启动器应用程序完全与新进程分开.然而,发射器使用的端口发生了一些可疑的事情.尽管它们不使用任何网络代码,但似乎生成的进程也在监听这些相同的端口. 问题在于当我杀死启动程序进程时,我无法重新启动它,因为生成的进程似乎仍在使用启动程序尝试启动的端口. 我的问题是,我做错了什么?远程代理是否有更好的方法来启动不会将自身附加到端口的进程? 这是在Linux环境中. 编辑:Qt Bug我最终采用了这个错误修复,只是重新编译Qt.似乎工作! 解决方法
根据
that bug report,Qt(QFile,QTcpSocket …)打开的所有文件和套接字描述符都标记为
FD_CLOEXEC ,以防止它们与子进程共享.
所以,如果你打开没有Qt的套接字,你应该做同样的事情. 编辑
你可以: >尝试how to set close-on-exec by default中给出的循环,就在行/ *之下,请不要这样做* /,或 #include <unistd.h> #include <iostream> #include <cstring> #include <cerrno> int main(int argc,char**argv) { // close all descriptors except stdout/stdin/stderr int maxfd = sysconf(_SC_OPEN_MAX); for(int fd = 3; fd < maxfd; fd++) close(fd); // pass all the program arguments except the wrapper name execve(argv[1],&argv[1],environ); // exec() only returns if an error occurred std::cerr << strerror(errno) << std::endl; return 1; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |