Linux における nohup と & の使い方と違いの詳細な説明

Linux における nohup と & の使い方と違いの詳細な説明

例:

例として、Python コード loop_hello.py を使用します。このコードは、ループ回数とループ内の hello world! を出力し、各出力の後に 1 秒間スリープします。

サンプルコードは次のとおりです。

インポート時間
 
main() を定義します:
 私 = 0 
 真の場合:
  私 += 1
  print('%d: こんにちは世界!' %(i))
  時間.睡眠(1)
 
'__main__' == __name__ の場合:
 主要()

loop_hello.py を実行すると、出力は次のようになります。

プログラムは 1 秒ごとにターミナルに文字列を出力します。このとき Ctrl+C を入力すると、プログラムは SIGINT シグナルを受信します。特別な処理が行われない場合、プログラムのデフォルトの動作は終了することです (上記を参照)。

python loop_hello.py & を使用すると、効果は次のようになります。

まず、プロセス番号はターミナルに2367として表示されます。

Ctrl + C と入力して SIGINT 信号を送信すると、プログラムは実行を継続します。

セッションが閉じられると、プログラムは SIGHUP シグナルを受信します。ps aux | grep loop_hello.py を実行すると、プロセス 2367 も閉じられていることがわかります。

ノーフープ

nohup python loop_hello.py を使用すると、効果は次のようになります。

  1. フォアグラウンドにプロセス番号が表示されない
  2. 「入力を無視し、出力を「nohup.out」に追加します」というプロンプトが表示されます
  3. helloの出力はフォアグラウンドに表示されない

セッションを閉じると、プログラムも終了しますか?

  1. プロセスIDを表示するには、ps aux | grep loop_helloを使用します。
  2. セッションを閉じると、プログラムは SIGHUP 信号を受信します。
  3. ps aux | grep loop_helloを再度使用して、プロセスがまだ存在することを確認します。
  4. プロセスを強制終了する

Ctrl + C をテストする

loop_hello.py を起動するには nohup を使用します。Ctrl+C を入力すると、SIGINT シグナルを受信した直後にプログラムが閉じられます。

& と nohup は一緒に使用されます

プログラムを実行するには、nohup python loop_hello.py & を使用します。効果は次のようになります。

Ctrl + C を押して SIGINT 信号を送信します。ps aux を使用して、プロセスがまだ存在するかどうかを確認します。

セッションを閉じ、SIGHUP信号を送信し、ps auxを使用してプロセスがまだ存在するかどうかを確認します。

プロセスを終了したい場合はkillのみ使用できます。

要約:

& を使用してプログラムをバックグラウンドで実行します。

  1. 結果は端末に出力されます
  2. Ctrl+Cを使用してSIGINT信号を送信し、プログラム耐性を高める
  3. セッションを閉じてSIGHUP信号を送信すると、プログラムは終了します。

nohup を使用してプログラムを実行します。

  1. 結果はデフォルトでnohup.outに出力されます。
  2. Ctrl+Cを使用してSIGINT信号を送信すると、プログラムは終了します。
  3. セッションを閉じてSIGHUP信号を送信すると、プログラムは免れる

平日は、プログラムをオンラインで起動するために、 nohup と & を一緒に使用することがよくあります。

  1. SIGINTとSIGHUP信号の両方に耐性がある

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  JavaScript オブジェクト指向の実践の詳細説明: カプセル化とオブジェクトのドラッグ

>>:  Ubuntu 18.04 に mysql5.7.23 をインストールするチュートリアル

推薦する

MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.17のインストールと設定のグラフィックチュートリアルを記...

Linux ファイル/ディレクトリの権限と所有権の管理

1. ファイルの権限と所有権の概要1. アクセス権Read r: ファイルの内容を表示し、ディレクト...

MySQLでconcat関数を使用する方法

以下のように表示されます。 //managefee_managefee テーブルの年と月を照会し、c...

Dockerコンテナの紹介

1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...

JS 関数のアンチシェイクと関数スロットリングを理解する方法

目次概要1. 関数デバウンス2. 機能スロットリング(スロットル)概要関数アンチシェイクと関数スロッ...

Windows サービス 2016 Datacenter\Stand\Embedded アクティベーション方法 (2021)

管理者権限でcmdを実行する slmgr /ipk CB7KF-BWN84-R7R2Y-793K2-...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...

MySQL 論理バックアップとリカバリ テストの概要

目次1. データベース論理バックアップとはどのようなバックアップですか? 2. よく使われる論理バッ...

Javascript Echarts 空気質マップ効果の詳細な説明

まず、空気質データと地図データを組み合わせる必要があります。マップデータには属性名があるさまざまな都...

JPQLに基づく純粋なSQL文方式の詳細な説明

JPQL は Java Persistence Query Language の略です。 Java ...

MySQLの比較演算子正規表現マッチングREGEXPの使用の詳細な説明

1. データを初期化する `test_01` が存在する場合はテーブルを削除します。 テーブル「te...

Zookeeper 不正アクセス テストの問題

目次序文Zookeeper サービスのオープンを検出情報を入手する接続テスト接続先修理計画参照する序...

Vue の v-model ディレクティブと .sync 修飾子の違いの詳細な説明

目次vモデル.sync微妙な違い機能シナリオを要約します。 vモデル <!--親コンポーネント...

Vue+Router+Element でシンプルなナビゲーションバーを実装する

このプロジェクトでは、Vue+Router+Element の具体的なコードを共有して、シンプルなナ...