You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

父进程未等待子进程终止:调用gnome-terminal后wait失效疑问

为什么wait(NULL)在启动gnome-terminal后没有等待nano结束?

核心原因是你等待的进程根本不是nano,而是gnome-terminal本身:

  • 当你通过execvp执行gnome-terminal -- nano时,实际流程是:
    1. 你的子进程(pid2对应的进程)启动gnome-terminal程序;
    2. gnome-terminal会创建一个全新的终端窗口进程,并在这个窗口里启动nano;
    3. 完成终端窗口的初始化后,gnome-terminal进程会立即退出,不会等待窗口里的nano结束。
  • 你的父进程调用wait(NULL),等待的是pid2这个子进程(也就是gnome-terminal进程)。一旦gnome-terminal退出,wait就会返回,父进程立刻开始执行gcc命令,完全不会理会终端窗口里还在运行的nano。

对比你之前直接exec nano的场景:那时子进程本身就是nano进程,wait等待的就是nano,自然会等到你关闭nano才继续执行后续逻辑。

用system()打开终端的情况也是同理:system会创建一个shell进程,shell启动gnome-terminal后,gnome-terminal很快退出,shell进程也跟着结束,wait等的是shell进程,同样不会等待nano。

内容的提问来源于stack exchange,提问作者jim_bug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:44:50