代码之家  ›  专栏  ›  技术社区  ›  Arkaitz Jimenez

在堕胎前把壳传给孩子

  •  1
  • Arkaitz Jimenez  · 技术社区  · 16 年前

    当前场景中,我启动一个分叉的进程,过了一会儿它中止()。
    问题是,fork和原始进程都打印到shell,但原始进程死后,shell将“返回”到提示。
    我想避免shell返回提示并保持这个过程没有结束,让孩子处理那里的情况。

    我想知道怎么做,但还没有,我的第一个猜测是关于tty处理,但不确定如何工作。

    我忘了提一下,如果这样做方便的话,可以在fork时间通过fd复制或一些重定向来完成对孩子的shell接管。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Nicholas Knight    16 年前

    我认为您可能需要使用第三个处理用户交互的过程,通过管道与“父”和“子”进行通信。

    您甚至可以使它成为一个相当轻量的包装器,只需将数据来回传递到父级和终端,直到父级死亡,然后切换到子级之间的传递。

    另外,我认为您将遇到的一个基本问题是,shell执行命令的方式并不是这样的。shell正在执行与调用system()等效的操作--它将等待它生成的进程终止,一旦完成,它将再次向用户显示一个提示。这不是一个TTY问题,而是Shell的工作方式。

        2
  •  1
  •   mob    16 年前

    巴什(我相信其他贝壳)有 wait 命令:

    wait: wait [n]

    等待指定的进程并报告其终止状态。如果 未给出n,等待当前所有活动的子进程, 返回码为零。n可以是进程ID或作业 规范;如果给定了作业规范,则该作业中的所有进程 管道正在等待。

        3
  •  0
  •   dmckee --- ex-moderator kitten    16 年前

    你是否考虑过颠倒父子关系?

    如果新进程的消亡顺序是可预测的,那么运行将在“子进程”中中止的代码和将在父进程中继续的代码。

    推荐文章