シェルからアプリケーションを「正しく」起動する方法
質問を正確に表現するのは難しいと思いますが、最善を尽くします。dwmデフォルトのウィンドウマネージャーとして使用し、dmenu私のアプリケーションランチャーとして。ブラウザ以外のGUIアプリケーションはほとんど使用しません。私の作業のほとんどは、コマンドラインから直接行われます。さらに、私はオペレーティングシステム、アプリケーションなどに関するミニマリズムの大ファンです。私が取り除けなかったツールの1つは、アプリケーションランチャーでした。主に、アプリケーションランチャーの動作/動作について正確に理解していないためです。大規模なインターネット検索でも、あいまいな説明しか表示されません。私がやりたいのは、アプリケーションを実際に生成すること以外はまったく使用できないため、アプリケーションランチャーを削除することです。これを行うには、シェルからアプリケーションを「正しく」起動する方法を知りたいと思います。これにより、「正しく」の意味は「アプリケーションランチャーが行うように」に近似できます。 シェルからプロセスを生成する次の方法について知っています。 exec /path/to/Program 新しいプロセスを作成せずに、指定されたコマンドでシェルを置き換えます sh -c /path/to/Program シェル依存プロセスを起動する /path/to/Program シェル依存プロセスを起動する /path/to/Program 2>&1 & シェルに依存しないプロセスを起動する nohup /path/to/Program & シェルに依存しないプロセスを起動し、出力を nohup.out 更新1:さまざまな条件下でのdmenu繰り返し呼び出しからの再構築などを説明できps -eflます。新しいシェル/bin/bashと、このシェルの子としてアプリケーションが生成されます/path/to/Program。子供が周りにいる限り、シェルは周りにあります。(これを管理する方法は私を超えています...)対照的にnohup /path/to/Program &、シェルから発行する場合/bin/bash、プログラムはこのシェルの子になりますが、このシェルを終了すると、プログラムの親が最上位のプロセスになります。したがって、最初のプロセスがたとえば/sbin/init verbose、それがあった場合、それはPPID 1プログラムの親になります。ここで私は、グラフを使って説明しようとしたものです:chromium経て発足したdmenu、firefox使用して開始されましたexec firefox & exit。 systemd-+-acpid |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper | | `-chromium---5*[chromium-+-{Chrome_ChildIOT}] | | |-{Compositor}] | | |-{HTMLParserThrea}] | | |-{OptimizingCompi}] | | `-3*[{v8:SweeperThrea}]] | |-chromium | |-chromium-+-chromium …