フォアグラウンドでプロセスを実行したままシェルを終了する

フォアグラウンドでプロセスを実行したままシェルを終了する

フォアグラウンドで実行中のプロセスがあります。Bashを終了できるかどうか知りたいのですが、

  1. (もちろん)フォアグラウンドプロセスを強制終了したり、通常通り終了したりすることなく、
  2. ターミナル プログラムを終了せずに、または接続がクライアント (iTerm2 や PuTTY など) 経由のリモートである場合は、そのクライアントを終了せずに実行します。

フォアグラウンド プロセスを実行していない場合は、Ctrl + d または を発行することで、簡単に送信終了を送信できることはわかっていますexit。フォアグラウンド プロセスを実行中にこれが可能かどうかを知りたいです。

答え1

フォアグラウンド プロセスは、以下のプロパティをサーバーに渡すことを意味し、それらはターミナルに関連付けられています。

  • ユーザーと対話するため。
  • スレーブ擬似デバイスに接続されたシェル (bash など) が使用するために、テキスト入力をマスター擬似デバイスに送ります。
  • マスター疑似デバイスからのテキスト出力を読み取り、ユーザーに表示します。

したがって、これは不可能だと思います。または、プロセスをデーモンとして実行し、インストール プロセスのように特定のターミナルやファイルに出力を送信します。

答え2

に加えて、screentmuxありますnohup。これはよりシンプルですが、状況によってはより適している場合もあります。こちらをご覧ください:nohup と Screen詳細については。

プロセスはnohupフォアグラウンドで実行されますが、プロセスを操作したり、ターミナルで出力を確認したりすることはできません。プロセスをバックグラウンドで開始するには、&プロセスの開始時に を追加します (つまりnohup <your command here> &)。

プロセスがすでに実行中の場合は、(プロセスを停止) を押した後にコマンド (停止したプロセスをバックグラウンドに送信) をnohup押すことで、ターミナルに再度アクセスできます。Ctrl+Zbg

編集(OP コメント後): シナリオを理解しているかどうかはわかりませんが、これを試してみるといいかもしれません:

  1. ターミナルウィンドウを開きます(内部で何らかのシェルが起動します)
  2. そのウィンドウ内で別のシェル(例:bash)を明示的に起動する
  3. 2番目のシェル内でフォアグラウンドプロセスを開始します(nohupsなどなし)
  4. 別のターミナルウィンドウを開く
  5. 「中間」シェルを識別します(テスト対象のプロセスの親プロセスになります)
  6. 「中間」シェルに kill シグナルを送信します。

これにより、テストされたプロセスが「セミデーモン」になり、最初のターミナル ウィンドウのトップ レベル シェルにアクセスできるようになります。テストされたプロセスはまだターミナルに接続されているため、ウィンドウを閉じると終了することに注意してください。

関連情報