有没有办法挂起属于 shell A 的进程并在 shell B 中将其前台化?

有没有办法挂起属于 shell A 的进程并在 shell B 中将其前台化?

我知道如何挂起一个进程并将其带入当前 shell 的前台,但我不知道如果我在 shell A 中运行了一个进程,现在我想将其带入当前 shell B 的前台。
不使用第三个工具就像screen,有没有办法完成这项任务?
在我看来,我认为它应该暂停并在前台恢复它,但是,我不知道该怎么做。

答案1

为了达到这种效果,通常需要做两件事:

  • 将进程重新设置为新的 shell。

    据我所知基本上没有办法做到这一点。据我所知,在 UNIX 中,只有一种方法可以重新设置进程的父级,并且只有当其原始父级进程不等待而死亡时才会发生这种情况。在这种情况下,进程(孤儿进程)将被重新指定为init进程 ID 1 的父进程。但这对您没有帮助,因为您既不想杀死原始父进程,也不希望新的父进程成为init

    任何人(获得许可)仍然可以向进程发送信号,例如SIGTSTPand SIGCONTSIGINT因此您可以使用该kill命令将这些信号发送到进程(或进程组),以模拟挂起、继续和中断作业等效果,但是新的shell 不会意识到这一点,也不会收到有关进程组状态的通知,因此无法使用其作业控制功能来跟踪它。

  • 重定向工作室。因为进程的 stdio 可能附加到启动进程的终端,并且您可能希望将其转到运行新 shell 的终端。除非您最初将输出重定向到文件或其他位置。

    确实存在一些方法可以做到这一点。

相关内容