Linux のバックグラウンドで & と nohup を使用する方法

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので、ジョブを実行して画面を占有したくない場合があります。ディスクに集中的にアクセスするプロセスについては、1 日のピーク時以外の時間帯 (早朝など) に実行することをお勧めします。これらのプロセスをターミナル画面ではなくバックグラウンドで実行できるようにするには、いくつかのオプションがあります。


ジョブがフォアグラウンドで実行されている場合、ターミナルはジョブによって占有されます。コマンドの後に & を追加すると、ジョブをバックグラウンドで実行できます。例えば: sh test.sh &
バックグラウンドで実行するのに適したコマンドには、検索、時間のかかるソート、一部のシェル スクリプトなどがあります。ジョブをバックグラウンドで実行するときには注意してください。ユーザーの操作を必要とするコマンドをバックグラウンドで実行しないでください。そうしないと、マシンはただ待機するだけになります。ただし、バックグラウンドで実行されているジョブは引き続き結果を画面に出力し、作業を妨げます。バックグラウンドで実行するジョブが大量の出力を生成する場合は、次の方法を使用してその出力をファイルにリダイレクトするのが最適です。

コマンド > out.file 2>&1 &

この方法では、すべての標準出力とエラー出力が out.file というファイルにリダイレクトされます。

PS: プロセスを正常に送信すると、プロセス ID が表示されます。これを使用して、プロセスを監視したり、強制終了したりできます。 (ps -ef | grep プロセス番号または kill -9 プロセス番号)

ノーフープ

& コマンドを使用した後、ジョブはバックグラウンドに送信されて実行されます。現在のコンソールは占有されませんが、現在のコンソールが閉じられると (アカウントからログアウトすると)、ジョブは実行を停止します。 nohup コマンドは、アカウントからログアウトした後も、対応するプロセスの実行を継続できます。 nohup はハングアップしないことを意味します。コマンドの一般的な形式は次のとおりです。

nohup コマンド &

nohup コマンドを使用してジョブを送信すると、出力ファイルが別途指定されていない限り、デフォルトではジョブからのすべての出力は nohup.out という名前のファイルにリダイレクトされます。

nohup コマンド > myout.file 2>&1 &

nohup を使用した後、多くの人はそれを無視します。実際、現在のアカウントが終了したり、異常終了したりすると、コマンドが自動的に終了する可能性があります。したがって、nohup コマンドを使用してコマンドをバックグラウンドで実行した後は、コマンドがバックグラウンドで引き続き実行されるように、exit を使用して現在のアカウントを通常どおり終了する必要があります。

Ctrl + Z
フォアグラウンドで実行中のコマンドをバックグラウンドに移し、一時停止状態にすることができます。

Ctrl+C キー
フォアグラウンド コマンドを終了します。

仕事
現在バックグラウンドで実行されているコマンドの数を確認します。

jobs -l オプションは、すべてのタスクの PID を表示します。ジョブのステータスは、実行中、停止中、または終了済みのいずれかになります。ただし、タスクが終了 (強制終了) された場合、シェルは現在のシェル環境に認識されているリストからタスクのプロセス ID を削除します。

2>&1分析

コマンド >out.file 2>&1 &
  1. command>out.file は、コマンドの出力を out.file ファイルにリダイレクトします。つまり、出力内容は画面に印刷されず、out.file ファイルに出力されます。
  2. 2>&1 は標準エラーを標準出力にリダイレクトします。ここでの標準出力は out.file ファイルにリダイレクトされています。つまり、標準エラーも out.file ファイルに出力されます。最後の & により、コマンドはバックグラウンドで実行されます。
  3. 2>1 の意味を考えてみましょう。2 と > の組み合わせはエラーのリダイレクトを意味し、1 はエラーが標準出力ではなくファイル 1 にリダイレクトされることを意味します。これを 2>&1 に変更すると、& と 1 の組み合わせは標準出力を意味し、エラーは標準出力にリダイレクトされます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)
  • Python Nohup Linux バックグラウンド実行出力の問題を解決する
  • PHP デーモン プロセスと Linux コマンド nohup を組み合わせて、1 秒に 1 回のタスク実行を実装します。
  • Linux で nohup ログ出力が大きすぎる問題の解決方法の詳細な説明
  • Linux nohup と tail-f の使い方
  • Linux での Nohup とバックグラウンド実行プロセスの表示と終了

<<:  MySQL 5.7のワンクリックインストールとパスワードポリシーの変更方法

>>:  MySQL の int、char、varchar のパフォーマンスを比較する

推薦する

MySQL の分離レベル、ロック、MVCC の紹介

この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

Dockerは公式Redisイメージをインストールし、パスワード認証を有効にします

参考: Docker 公式 Redis ドキュメント1. 特別なバージョン要件がある場合は、redi...

MySQL Innodb インデックス メカニズムの詳細な紹介

1. インデックスとは何ですか?インデックスは、ストレージ エンジンがレコードをすばやく検索するため...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

MySQL 8.0 バージョンで getTables がすべてのデータベース テーブルを返す問題の簡単な分析

序文この記事では、主にライブラリ内のすべてのテーブルを返すMysql8.0ドライバgetTables...

IDEA が Docker を統合してリモート展開を実現するための手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

Linux echo テキスト処理コマンドの使用法と例

Linux ヘルプ ドキュメントでの echo の説明は、Python や Java などのプログラ...

Docker ベースの Jenkins のデプロイに関する詳細なチュートリアル

このドキュメントを作成した当時は2019年12月頃で、er2.200が最新バージョンでした。 1.画...

WeChatミニプログラムがシームレスなスクロールを実現

この記事の例では、WeChatアプレットのシームレスなスクロールを実現するための具体的なコードを参考...

Vue の新しいパートナー TypeScript クイックスタート実践記録

目次1. 公式の足場を使って構築する2. プロジェクトディレクトリ分析3. TypeScript の...

Centos での Python のアップグレードと Mongodb ドライバーのインストールに関する問題

Python バージョンを確認します (python -V)。2.7 未満の場合は、アップグレードす...

React のクラスからフックへの移行

目次リアクトフック序文なぜフックなのか?クラス関数クラスとフックの比較フックはコンポーネントの状態を...

Dockerプライベートウェアハウスの構築とインターフェース管理の詳細な説明

1. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...