
フォアグラウンドで実行中のプロセスがあります。Bashを終了できるかどうか知りたいのですが、
- (もちろん)フォアグラウンドプロセスを強制終了したり、通常通り終了したりすることなく、
- ターミナル プログラムを終了せずに、または接続がクライアント (iTerm2 や PuTTY など) 経由のリモートである場合は、そのクライアントを終了せずに実行します。
フォアグラウンド プロセスを実行していない場合は、Ctrl + d または を発行することで、簡単に送信終了を送信できることはわかっていますexit
。フォアグラウンド プロセスを実行中にこれが可能かどうかを知りたいです。
答え1
フォアグラウンド プロセスは、以下のプロパティをサーバーに渡すことを意味し、それらはターミナルに関連付けられています。
- ユーザーと対話するため。
- スレーブ擬似デバイスに接続されたシェル (bash など) が使用するために、テキスト入力をマスター擬似デバイスに送ります。
- マスター疑似デバイスからのテキスト出力を読み取り、ユーザーに表示します。
したがって、これは不可能だと思います。または、プロセスをデーモンとして実行し、インストール プロセスのように特定のターミナルやファイルに出力を送信します。
答え2
に加えて、screen
もtmux
ありますnohup
。これはよりシンプルですが、状況によってはより適している場合もあります。こちらをご覧ください:nohup と Screen詳細については。
プロセスはnohup
フォアグラウンドで実行されますが、プロセスを操作したり、ターミナルで出力を確認したりすることはできません。プロセスをバックグラウンドで開始するには、&
プロセスの開始時に を追加します (つまりnohup <your command here> &
)。
プロセスがすでに実行中の場合は、(プロセスを停止) を押した後にコマンド (停止したプロセスをバックグラウンドに送信) をnohup
押すことで、ターミナルに再度アクセスできます。Ctrl+Z
bg
編集(OP コメント後): シナリオを理解しているかどうかはわかりませんが、これを試してみるといいかもしれません:
- ターミナルウィンドウを開きます(内部で何らかのシェルが起動します)
- そのウィンドウ内で別のシェル(例:bash)を明示的に起動する
- 2番目のシェル内でフォアグラウンドプロセスを開始します(
nohup
sなどなし) - 別のターミナルウィンドウを開く
- 「中間」シェルを識別します(テスト対象のプロセスの親プロセスになります)
- 「中間」シェルに kill シグナルを送信します。
これにより、テストされたプロセスが「セミデーモン」になり、最初のターミナル ウィンドウのトップ レベル シェルにアクセスできるようになります。テストされたプロセスはまだターミナルに接続されているため、ウィンドウを閉じると終了することに注意してください。