execvp() 调用后主窗口关闭

Posted

技术标签:

【中文标题】execvp() 调用后主窗口关闭【英文标题】:Main Window closes after execvp() call 【发布时间】:2020-03-03 19:03:17 【问题描述】:

我正在学习 QT 和 QT Creator 以获得使用它的经验。将 Arch Linux 与最新的 QT 库一起使用。

在按钮单击功能上,我正在尝试执行以下操作:

std::string name= filename.toStdString();
char *file_path = (char*)name.c_str();

char *myargs[] = "wormhole", "send", file_path, NULL;
int rc = execvp(myargs[0], myargs); /*This call is the question*/

int rc 声明发生的地方,这个类产生的主窗口关闭。我不确定为什么。也许execvp() 不是运行其他程序的正确调用?

此调用会将完整文件路径作为参数传递给 wormhole,它可能存在于 /usr/bin 或 /usr/local/bin 中,因此调用 execvp()

【问题讨论】:

也许execvp 是不正确的调用来实现什么?代码应该做什么? @idclev 我正在尝试调用另一个程序,将文件名作为 c 字符串参数传递。它确实成功并打印到标准输出,但我不再有主窗口。 文件名和路径是什么?请在问题中包含该信息 当 execvp() 实际运行另一个程序时,这与我的问题无关。 如果它与问题无关,那为什么是这个问题? “也许 execvp() 不是正确的调用方式?” ... 【参考方案1】:

当前进程正在被新的实例化进程替换。

exec() 系列函数用新的进程映像替换当前进程映像。

Execvp Linux man page

您可能希望先 fork(),然后使用 execvp()。

【讨论】:

在这种情况下我完全忘了使用fork(),然后我会使用子进程来执行另一个程序。现在可以完美运行了!

以上是关于execvp() 调用后主窗口关闭的主要内容,如果未能解决你的问题,请参考以下文章

linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

在while循环中使用execvp和fork时的无限循环

execvp() 永远不会在管道上完成

pthread 的 malloc 内存,然后 fork + execvp

制作:execvp:g ++:权限被拒绝

如何捕获 execvp 的输出