ターミナルからアプリケーションを実行するときに自動的にアプリケーションを破棄する

ターミナルからアプリケーションを実行するときに自動的にアプリケーションを破棄する

ターミナルからアプリケーションを起動した後、そのアプリケーションを自動的に放棄するにはどうすればよいですか?

たとえば、ターミナルを起動して実行するとfirefoxアプリケーションが起動しますが、ターミナルを閉じると firefox も終了します。ターミナルから起動したアプリケーションを誤って終了しないようにするには、まず ampersant: を使用してアプリケーションをバックグラウンドに置きます。firefox &これにより、そのターミナルのプロンプトを使用する機能も復元されます。次に、アプリケーションのプロセス ID (PID) を使用して、同じターミナルからアプリケーションを解放できます。次の例を参照してください。

$ firefox & 
$ ps | grep firefox
14917 pts/6    00:00:00 firefox
$ disown 14917

アプリケーションは、使用している端末から独立して実行されるようになり、端末を閉じてもアプリケーションが終了しなくなりました。

しかし、アプリケーションを起動するたびにこれを自動的に実行するにはどうすればよいでしょうか?

答え1

最も簡単な方法は、以下を実行することです。

daemon firefox

端末自体の使用/終了を継続できます

答え2

編集:より良い答えIV によって提供されました。

これを自動的に行うには、bash エイリアスを使用できます。ホーム ディレクトリの .bash_aliases ファイルに次の行を追加すると、次のコマンドをmy_application使用して、ターミナルから任意のアプリケーションを起動し、自動的にバックグラウンドに置き、その後そのターミナルから削除することができますs my_application

# start programs from shell but immediately disown them
startAndDisown() {
    $1 & disown $! 
}
alias s=startAndDisown

$!最後の非同期ジョブの PID が自動的に返されることに注意してください。

答え3

firefox & disown $!私にはうまくいきませんでしたが、私にとってはうまくいく同様の解決策はfirefox&;disown

他に、GNU Screen を使用する方法もありますdisown。これは、ターミナル ウィンドウを閉じてもターミナル セッションを保持します。ただし、実用性はターミナルの使用方法によって制限されます。一度に 1 つのターミナル ウィンドウのみを使用する場合は、これは優れたソリューションです。複数のターミナルを使用する場合は、それほど効果的ではありません。お気に入りのパッケージ マネージャーを使用して screen をインストールし、ターミナルを開くたびにscreen -r(またはscreenscreen セッションが実行されていない場合) 入力します。その後、ターミナルを閉じることを心配する必要はありません。これは非常にニッチなソリューションですが、適している可能性があります。

関連情報