シェルAに属するプロセスをサスペンドし、シェルBで前景化する方法はありますか?

シェルAに属するプロセスをサスペンドし、シェルBで前景化する方法はありますか?

プロセスを中断して現在のシェルの前景にインポートする方法を知っていますが、シェルAで実行されているプロセスがあるかどうかわかりません。
3番目のツールを使わずにscreenこれを行う方法はありますか?
私の考えでは、フォアグラウンドで一時停止してからやり直す必要があると思いますが、どうすればいいかわかりません。

答え1

この効果を得るには、通常、次の 2 つのタスクを実行する必要があります。

  • プロセスを新しいシェルにリセットします。

    私が知っている限り、基本的にこれを行う方法はありません。私が知っている限り、UNIXでプロセスを再び親にする方法は1つだけで、元の親プロセスが待機せずに終了する場合にのみ発生します。この場合、プロセス(孤立プロセス)はinitプロセスID 1の親として再割り当てされます。ただし、元の親プロセスや新しい親プロセスを終了したくないため、これは役に立ちませんinit

    SIGTSTP権限のある人は誰でも同じプロセスにシグナルを送信できるため、そのSIGCONTコマンドSIGINTを使用してkillそのシグナルをプロセス(またはプロセスグループ)に送信して、ジョブの一時停止、継続、中断などの効果をシミュレートできます。新しいシェルはそれを認識せず、プロセスグループの状態について通知されないため、ジョブ制御機能を使用して追跡することはできません。

  • スタジオをリダイレクトします。プロセスのstdioがプロセスが開始された端末に接続される可能性があるため、それを新しいシェルが実行されている端末に転送したい場合があります。元の出力をファイルまたは別の場所にリダイレクトしていない場合。

    確かにこれを行う方法があります。

関連情報