さまざまなソースからの回答を含む類似のトピックの古いスレッドへの回答を投稿しました。以下は、このスレッドに適合した回答のコピーです。
以下の作品:
$ (gui_app &> /dev/null &)
これは、ネイサンフェルマンの答えとリダイレクトです。
「&> / dev / null」は、stdoutとstderrの両方をnullデバイスにリダイレクトします。最後のアンパサンドは、プロセスをバックグラウンドで実行します。コマンドを括弧で囲むと、「gui_app」がサブシェルで実行されます。
これを行うと、このコマンドを実行するコンソールから「gui_app」プロセスが切り離されます。そのため、親端末エミュレータが実行されているウィンドウを閉じても、「gui_app」は閉じません。私はこれを実行し、「pstree」コマンドでプロセスツリーを見て、この方法で開始されたアプリケーションが「init」の子プロセスになることを発見しました。
例えば、
$ gui_app &> /dev/null &
バックグラウンドでアプリケーションを実行しますが、コンソールプロセスの子プロセスになり、ターミナルを閉じると終了します。(exitコマンドまたはCtrl-Dを使用してbashを介して端末を終了しても、バックグラウンドプロセスをinitに渡すことでbashをクリーンアップできます。)
「nohup」はNawaManが示唆したように機能しますが、デフォルトでは出力とエラーをファイルにリダイレクトします。JeffGが回答したように、「disown」コマンド(シェルで使用可能な場合)は、バックグラウンドプロセスを開始した後、ターミナルからプロセスを切り離すことができます。
$ gui_app &
$ disown
(ところで、これはすべてbashに当てはまります。他のシェルには、これを行うための他のメソッド/構文があるはずです。)
参照:
プロセスの否認(UNIX Power Tools)
複雑なオプションなどのないGUIアプリケーションの単純な呼び出しである場合、「gmrun」またはdmenu(警告:大音量の音声)などのランチャーを使用することも適切なオプションです。キーの組み合わせにバインドします。ランチャーはまだ使用していませんが、これら2つを試しました。
注:他のスレッドのコメントの CarlFは、「gui_app&」メソッドを介して開始されたGUIアプリが親端末を終了しても閉じないことを報告しています。さまざまな方法で端末を閉じていたと思います。ターミナルエミュレータが実行されていたウィンドウを閉じていました。シェル(終了コマンドまたはCtrl-D)を介してターミナルエミュレータを終了していた可能性があります。これをテストしたところ、CarlFが言うように、bashを終了しても、ターミナルのバックグラウンドプロセスとして起動されたGUIが停止しないことがわかりました。bashは、クリーンアップの機会が与えられると、バックグラウンドプロセスを初期化して引き渡すようです。実際、これはサブシェルで開始されたバックグラウンドプロセスがinitに渡されるメカニズムでなければなりません。