我正在创建一个成功分叉的 Qt/C++ 控制台应用程序。当我在 fork 之前调用 QCoreApplication::applicationPid() ,然后在 fork 之后(在子进程中)调用 QCoreApplication::applicationPid() 时,我得到相同的 pid。
我意识到我可以只使用 fork() 的返回值,但我正在尝试以 Qt 的方式做事。在 Qt 中是否有更好/正确的方法来获取子进程的 PID(从子进程内部)?
出于好奇,为什么 QCoreApplication::applicationPid() 不提供新的 PID?我认为它现在正在提供 ppid......
返回值fork()
取决于你是在分叉中还是在父级中。看here:
成功时,子进程的 PID 将在父进程中返回,子进程中将返回 0。失败时,父进程返回 -1,不创建子进程,并适当设置 errno。
因此,您只能从父级中获取子级的 pidfork()
(不是像你暗示的那样在孩子身上)。这实际上就是检查您是否在子进程中的方法——即返回值是否为 0。
Anyway:
没有办法fork
Qt 方式,因为分叉在所有平台(尤其是 Windows)上都是不可能的,因此 Qt 不能这样做。
另请注意,Qt 的某些部分在子进程中可能处于无效状态(例如,在 MacOSX 上,Cocoa GUI 不能在分叉进程中使用)。所以要小心。
我还没有真正找到 Qt 是否支持分叉的详细信息(我的意思是它的行为是理智的:例如,分叉中的线程列表会不同,所以它必须意识到这一点)。我已经问过了here.
QCoreApplication::applicationPid()
可能会缓存该值,从而在子级中返回错误的值。但不用关心这个,只需使用getpid()
相反 - 您已经在使用非跨平台fork()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)