一部のプログラムを開始するスクリプトを作成しようとしています
startup.sh
knetworkmanager
emesene
keepassx
問題は、スクリプトを実行すると、knetworkmanagerのみが起動することです。これはそれを開始し、終了するまで待つためです。プログラムを待たずに開始するにはどうすればよいですか?スクリプトが終了してもすべてのプロセスが強制終了されるため、各コマンドの後に単に「&」を追加することはできないと思います。
一部のプログラムを開始するスクリプトを作成しようとしています
startup.sh
knetworkmanager
emesene
keepassx
問題は、スクリプトを実行すると、knetworkmanagerのみが起動することです。これはそれを開始し、終了するまで待つためです。プログラムを待たずに開始するにはどうすればよいですか?スクリプトが終了してもすべてのプロセスが強制終了されるため、各コマンドの後に単に「&」を追加することはできないと思います。
回答:
スクリプトを実行するシェルが終了すると、起動したプロセスにHUPシグナルが送信されます。それらがシグナルをキャッチしない場合、それらは終了します。したがって、&を使用するだけで十分かどうかは、アプリケーションによって異なります。安全のために、そのようなnohupを使用してください:
nohup your-program >>/dev/null 2>>/dev/null &
詳細については、nohupとkillのマニュアルページを参照するか、nohupに関するウィキペディアの記事を参照してください。
あなたが与えたサンプルプログラムに基づいて、KDEが起動したときにいくつかのプログラムを起動しようとしているようです。もしそうなら、KDEの自動起動機能を見てください。この記事では、詳細について説明し、プログラムを自動起動に追加する方法について説明します。
他の人が言っ&
たように、シェルを実行するときに、オペレーターを使用してコマンドをバックグラウンドに入れます。
コンポーネントパーツを(同時にではなく)順序どおりに実行したいが、全体をバックグラウンド化したい場合は、次のようなサブシェルを使用します。
(knetworkmanager; emesene; keepassx) &
または、各パーツの操作を前のパーツの正常な完了を条件とする場合は、次のようにします。
(knetworkmanager && emesene && keepassx) &
各コマンドの後に「&」を追加すると確実に機能します。つまり、startup.shが終了した後でも、これらのスクリプトまたはプログラムは引き続き実行されます。