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)