インタラクティブなbashプロセスとbashプロセスで開始されていないプロセスがある場合は、そのプロセスをシェルの操作にする方法(プログラム)はありますか?
不可能に見えますが、便利な機能になることができます。時々、誤ってbashプロセスを終了し、そのタスクのいくつかがinitプロセスに再割り当てされることがあります。私はそれらをよりよく管理するために他のbashプロセスの仕事にしたいと思います。
ありがとうございます。
答え1
私は学校でこれが不可能だと聞きました。これは明らかにもはや真実ではありませんが、単一のプロセスでこの問題を解決するのはかなり複雑です。
コメントに記載されている2つのリンクは、目的のタスクを実行するために選択できる簡単なオプションを説明しています。ただし、移動コマンドを開始する前にアクションを実行する必要があります。
https://unix.stackexchange.com/a/8696/329452 https://unix.stackexchange.com/a/49155/329452
または、プロセスが使用しているttyを変更する方法を教えてください。したがって、入力と出力を移動できますが、アクティブプロセスの子にはなりません。
この投稿にはより多くの回答がありますが、基本的にこれらの回答と重複しています。
プロセスの親を変更するには、その親が死ぬ必要があります。過去には常に親エントリをPID 1に変更しました。これがいつ変更されたかはわかりませんが、Linux 3.4以降、すべての孤児をインポートするプロセスが変更される可能性があります。https://unix.stackexchange.com/a/177361/5132。まだ結果を確認しています。私は大きな変化のためにsystemdがあまりモノリシックになると思いました。しかし、明らかにsystemdはそれ自体全体です。(ページの約90%)
しかし、この役割を引き受けたプロセスは全体の役割を引き受けなければなりません。これは1つのプロセスに対してのみ行われる操作ではありません。
ほとんどのUNIXシェルには、移植されたばかりの新しいサブプロセスを認識するコードがありません。これらのシェルの中には、他のシェルよりもサブプロセスの終了に関する通知が表示される可能性があります。タスク制御にこれらのプロセスを追加することが一般的なシェル機能になるとは思わない。必要に応じて、zsh用のモジュールがシェルサポートを追加できると思います。私は実際にこれを行うためにzshパッケージの一部ではなくzshモジュールまたはそれを処理できる他のシェルを見つけませんでした。