nohupなしでbashでプログラム/プロセスを開始した場合、シェル/ターミナルが閉じた後でも後でプログラムを実行できますか?

nohupなしでbashでプログラム/プロセスを開始した場合、シェル/ターミナルが閉じた後でも後でプログラムを実行できますか?

bashでプログラム/プロセスが始まるときいいえ nohup、後で(追加操作を実行して)シェル/ターミナルが閉じた後でもこのプログラムを実行することは可能ですか?
ここに素晴らしい議論があります。nohup、disown、&の違い興味のある人がいる場合は見てください。

この質問では、プログラムがnohupなしで起動したときに観察した内容を共有したいと思います。

編集 - 元の質問を無視します。はい、disownプロセスの実行後にターミナル/シェルを終了することは重要ではないようです。プロセスが実行されているようです。元の端末が閉じた後もps -ef | grep javaプロセスが実行されていることがわかります。

答え1

上記の制限により、端末を閉じた後もプロセスを実行し続ける方法はありません。なぜ?プロセスにもかかわらず、disown端末内のシェルはまだjava -jar myapp.jarプロセスの親です。disownシェルプロセスはHUP信号を送信しないように指示しますが、java端末を閉じるとbashプロセスが最初に終了し、シェルの親プロセスがそのjavaプロセスを継承します。その後、この新しい親プロセスはすべての継承されたプロセスをクリーンアップするためにHUP tpを送信し、高度なjava機能のみを使用してプロセスがHUP信号を受信し、それに応じてアクションを実行するのを防ぎます。nohupjava

答え2

質問した理由は、コマンドを直接起動し、ログアウト後も実行を続けたいと思っていますが、まだコマンドを制御できるようにしたいと思います。

いくつかの要因がプロセスのライフサイクルを制御します。最も重要な2つの側面は、親プロセス(またはプロセスグループ)と制御端末です。

対話型コマンドを実行すると、簡単にバックグラウンドで送信できます(「ctrl + z」で停止し、「bg」でバックグラウンドで続行します)。

今、トリッキーな部分が出てきます。プロセスを別のプロセスグループ(および端末)に接続することです。端末の場合、通常は「screen」を使用し、端末を再接続します。https://github.com/nelhage/reptyr

もちろん、このツールに代わるものもあります。この作業の後、すべてのプロセスが正常に動作するわけではないので、マイレージが異なる可能性があることに注意することも重要です。

関連情報