bash/gnome 端末の子プロセスは終了しません (CentOS/RHEL)

bash/gnome 端末の子プロセスは終了しません (CentOS/RHEL)

今日、私は簡単な説明があるかもしれませんが、私には非常に予想外のものを観察しました。私はCentOS(そして同じように動作するRHEL)を実行しています。ターミナルでbashを開き、geditなどの子プロセスを起動します。窓が開いていて大丈夫です。 "ps"を実行すると、geditにbashが親プロセスであり、bash自体にgnome-terminalが親プロセスであることがわかります。 Bashを停止すると、すべての子プロセスも停止したいと思います。しかし、geditは引き続き実行され、親は1(init)になります!

私はシェルを優雅に止めずに強制的に殺そうとしましたが、同じ結果を得ました。シェルの代わりに端末を終了しようとしましたが、それでも同じ結果が得られました。 Xボタンをクリックして端末を閉じると、geditも閉じます。

私はこのような行動を期待していませんでした。 nohupでgeditを起動しても驚かないでしょう。しかし、nohupがなくても…なぜまだ生きていますか?

たぶん、誰かが状況についていくつかの情報を提供し、そこで何が起こっているのかを知ることができます。よろしくお願いします!

ベストアンサー1

gedit、gvim、google-chromeなどのプログラムは自動的にバックグラウンドでフォークされます。これにより、次のように入力できます。

gedit /home/msw/ul-answer

新しいウィンドウをマップし、シェルプロンプトを復元します。これは悪いデザインの選択ではなく、通常これを上書きするオプションがあります。これらのコマンドは制御端末から切り離されgedit -wたりgvim --nofork、シェルプロンプトに戻ることはありません。

プログラムをバックグラウンドで実行するには、分岐してから親プロセスを終了します。これにより、入力した直後に通常のgeditインスタンスがinit(PPID == 1)の子インスタンスになります。

他のプログラム(mplayerやキャリバーなど)は頻繁に入力しないか、デバッグ情報を制御端末にダンプするのが好きなので、自動的にバックグラウンドに切り替えられません。

奇妙さを加えた:

少し時間をテストし、strace出力などを見た後、geditはバックグラウンドで自動的に実行されないようです。私がgvimについて言ったことはまだ有効であり、就寝時間も経過したので、今はそのままにします。

おすすめ記事