このガイドでは、Linuxシステムでのプロセス処理におけるシンプルでありながら重要な概念、つまり、プロセスを制御端末から完全に切り離す方法を明らかにします。
プロセスが端末に関連付けられている場合、2つの問題が発生する可能性があります。
- 制御端末は、大量の出力データとエラー/診断メッセージでいっぱいです。
- ターミナルが閉じられた場合、プロセスとその子プロセスは終了します。
これらの2つの問題に対処するには、プロセスを制御端末から完全に切り離す必要があります。実際に問題を解決する前に、バックグラウンドでプロセスを実行する方法について簡単に説明しましょう。
Linuxプロセスまたはコマンドをバックグラウンドで開始する方法
以下のtarコマンドの例のように、プロセスがすでに実行されている場合は、Ctrl+Z
を押すだけです。 停止するには、コマンドbg
を入力します バックグラウンドでジョブとして実行を続行します。
jobs
と入力すると、すべてのバックグラウンドジョブを表示できます 。ただし、その stdin 、 stdout 、 stderr まだターミナルに参加しています。
$ tar -czf home.tar.gz . $ bg $ jobs


アンパサンド、&
を使用して、バックグラウンドから直接プロセスを実行することもできます。 サイン。
$ tar -czf home.tar.gz . & $ jobs


以下の例を見てください。tarコマンドはバックグラウンドジョブとして開始されましたが、プロセスがまだ制御端末に接続されていることを意味するエラーメッセージが端末に送信されました。
$ tar -czf home.tar.gz . & $ jobs


ターミナルを終了した後もLinuxプロセスを実行し続ける
否認を使用します コマンド。プロセスが起動されてバックグラウンドに配置された後に使用されます。これは、シェルのアクティブリストジョブからシェルジョブを削除するための作業であるため、fg
は使用しません。 、bg
その特定の仕事に関するコマンドはもうありません。
さらに、制御端末を閉じると、ジョブがハングしたり、 SIGHUPを送信したりすることはありません。 どんな子の仕事にも。
推奨される読み物: リモートSSHセッションとプロセスを実行し続けるための5つの方法
以下のdiswonの使用例を見てみましょう。 bash組み込み関数。
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs


nohup
を使用することもできます コマンド。これにより、ユーザーがシェルを終了したときにプロセスをバックグラウンドで実行し続けることもできます。
$ nohup tar -czf iso.tar.gz Templates/* & $ jobs


制御端末からLinuxプロセスを切り離す
したがって、プロセスを制御端末から完全に切り離すには、以下のコマンド形式を使用します。これは、グラフィカルユーザーインターフェイス( GUI )に対してより効果的です。 )Firefoxなどのアプリケーション:
$ firefox </dev/null &>/dev/null &
Linuxでは、 / dev / null は、書き込まれたすべてのデータを書き留める(削除する)特別なデバイスファイルです。上記のコマンドでは、入力が読み取られ、出力が / dev / nullに送信されます。 。
推奨される読み物: ターミナルセッションを切り離すための10の画面コマンドの例
結論として、プロセスが制御端末に接続されている場合、ユーザーとして、プロセスデータのいくつかの出力行と端末上のエラーメッセージが表示されます。この場合も、制御端末を閉じると、プロセスと子プロセスが終了します。
重要なのは、この件に関する質問やコメントについては、以下のコメントフォームを使用してご連絡ください。