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 をインストールするチュートリアル

推薦する

Vue router-viewとrouter-linkの実装原理

使用 <div id="アプリ"> <router-link ...

AngularとIonicのライフサイクルとフック関数を素早く理解するための記事

目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...

CSS3で作成した画像スクロール効果

成果を達成する実装コードhtml <base href="https://s3-us...

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

ubuntu14.04 に jdk1.8 をインストールするチュートリアル

1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....

Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)

イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

要素テーブルからヘッダーを削除する方法

show-header属性を使用したドキュメントのヒントshow-header <el-テーブ...

MySQL マスタースレーブレプリケーション切断の一般的な修復方法

目次01 問題の説明02 ソリューション1. 他のスレーブライブラリを見つけてすぐに置き換える2. ...

div が iframe に覆われるいくつかの状況とその解決策

類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...

Chrome、Firefox、IEで入力カーソルの位置がずれる問題の解決方法

ブラウザで入力カーソルがずれる問題の詳しい説明<br />仕事で問題に遭遇し、解決策を探...

JavaScriptカルーセルの実装について

今日もとても実践的な事例です。名前を聞くだけで高度で難しそうですよね?今日はカルーセル画像の真髄を簡...

Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました

MySQLへの接続ここでは、リモート接続に navicat を使用します。MySQL に接続する前に...

JSはシンプルなカウンターを実装します

HTML CSS および JavaScript を使用して、プラス、マイナス、ゼロの 3 つのボタン...