Linux のバックグラウンドで実行するいくつかの方法 (まとめ)

Linux のバックグラウンドで実行するいくつかの方法 (まとめ)

1. ノーフープ

ハングアップ信号を無視してプログラムを実行する

追加メモ
nohup コマンドは、ハングアップ信号を無視してプログラムを実行することができ、実行中のプログラムの出力情報は端末に表示されません。
nohup コマンドの出力を端末にリダイレクトするかどうかに関係なく、出力は現在のディレクトリの nohup.out ファイルに追加されます。
現在のディレクトリ内の nohup.out ファイルが書き込み可能でない場合、出力は $HOME/nohup.out ファイルにリダイレクトされます。
追加用にファイルを作成または開くことができない場合、コマンド パラメータで指定されたコマンドを呼び出すことはできません。
標準エラーが端末の場合、標準エラーに書き込まれる指定されたコマンドのすべての出力は、標準出力と同じファイル記述子にリダイレクトされます。

簡単な例:

nohup コマンド &

出力インスタンスの指定

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

その他の関連コマンド
ctrl + z #フォアグラウンドで実行中のコマンドをバックグラウンドに移し、一時停止状態にすることができます。
fg #バックグラウンドタスクをフォアグラウンド実行に切り替える
bg #バックグラウンドで一時停止されているコマンドを変更して、バックグラウンドでの実行を継続します。バックグラウンドで複数のコマンドが実行されている場合は、bg %jobnumber を使用して選択したコマンドを呼び出すことができます。
jobs #バックグラウンド実行のステータスを確認します。jobs -l オプションを使用すると、すべてのタスクの PID を表示できます。
ps -ef | grep コマンドまたは ps aux | grep コマンド #プロセスを表示する
kill -9 プロセスID #対応するプロセスをkillします。

より高度な使用方法は次のとおりです。

ps aux | grep command | grep -v grep | awk '{print $1}' | xargs kill -9 #これは、コマンドを通じてプロセスIDを直接取得し、それを直接強制終了することを意味します

2. スクリーン

コマンドライン端末切り替え用

a. セッションの回復 画面自体が終了していない限り、画面内で実行されているセッションは回復できます。これは、ネットワーク接続が失われた場合でも、リモートでログインするユーザーにとって特に便利です。
ユーザーは、すでに開いているコマンドライン セッションの制御も失いません。ホストに再度ログインし、screen -r を実行するだけでセッションを再開できます。
同様に、一時的に離れる場合も、detach コマンドを実行して、内部のプログラムが正常に動作していることを確認しながら、画面を一時停止(バックグラウンドに切り替え)することもできます。

b. 複数のウィンドウ Screen 環境では、すべてのセッションが独立して実行され、独自の番号、入力、出力、およびウィンドウ キャッシュを持ちます。ユーザーはショートカット キーを使用してさまざまなウィンドウを切り替えることができます。
また、各ウィンドウの入力と出力を自由にリダイレクトできます。 Screen は、コピーや貼り付けなどの基本的なテキスト操作を実装し、スクロール バーに似た機能も提供します。
ウィンドウ条件の履歴を表示できます。ウィンドウをパーティション分割して名前を付けることもでき、バックグラウンド ウィンドウのアクティビティを監視することもできます。 セッション共有画面を使用すると、1 人以上のユーザーが異なる端末から複数回セッションにログインし、セッションのすべての機能を共有できます (たとえば、まったく同じ出力を表示できます)。また、ウィンドウのアクセス許可のメカニズムも提供します。
ウィンドウはパスワードで保護できます。

c. スクリーンの設置

yum インストール -y スクリーン

基本的な構文
screen -AmRvx -[ls -wipe][-d <ジョブ名>][-h <行数>][-r <ジョブ名>][-s ][-S <ジョブ名>]

オプション
-A すべてのウィンドウを現在の端末のサイズに合わせてサイズ変更します。
-d <ジョブ名> 指定された画面ジョブをオフラインにします。
-h <行数> は、ウィンドウのバッファ行数を指定します。
-m すでにスクリーン ジョブが進行中の場合でも、新しいスクリーン ジョブを強制的に作成します。
-r <ジョブ名> オフライン画面ジョブを復元します。
-R 最初にオフライン ジョブの回復を試みます。オフライン ジョブが見つからない場合は、新しい画面ジョブが作成されます。
-s は、新しいウィンドウを作成するときに実行されるシェルを指定します。
-S <ジョブ名> は画面ジョブの名前を指定します。
-v バージョン情報を表示します。
-x 以前オフラインだったスクリーンジョブを復元します。
-ls または --list は、現在のすべての画面ジョブを表示します。
-wipe は現在のすべての画面ジョブをチェックし、使用できなくなったジョブを削除します。

共通画面パラメータ
screen -S yourname -> yournameという新しいセッションを作成する
screen -ls -> 現在のセッションをすべて一覧表示する
screen -r yourname -> yournameセッションに戻る
screen -d yourname -> リモートでセッションを切断する
screen -d -r yourname -> 現在のセッションを終了し、yournameセッションに戻ります

各画面セッションでは、すべてのコマンドは ctrl+a (Ctrl + a) で始まります。

Ctrl + a ? -> すべてのキーバインディング情報を表示
Ctrl + ac -> シェルを実行する新しいウィンドウを作成し、それに切り替える
Ctrl + an -> 次へ、次のウィンドウに切り替える
Ctrl + ap -> 前へ、前のウィンドウに切り替える
Ctrl + a 0..9 -> ウィンドウ 0..9 に切り替える
Ctrl+a [スペース] -> ウィンドウ0からウィンドウ9まで順番に切り替える
Ctrl + a Ctrl + a -> 最近使用した2つのウィンドウを切り替える
Ctrl + ax -> 現在のウィンドウをロックし、ユーザーパスワードでロックを解除します
Ctrl + ad -> デタッチで、現在のセッションを一時的に離脱し、現在の screen セッション (複数のウィンドウが含まれている場合があります) をバックグラウンドに実行させて、screen に入る前の状態に戻ります。このとき、screen セッションでは、各ウィンドウ (フォアグラウンド/バックグラウンドを問わず) で実行中のプロセスは実行を継続しており、ログアウトしても影響を受けません。
Ctrl + az -> 現在のセッションをバックグラウンドにし、シェルの fg コマンドを使用して戻ります。
Ctrl + aw -> すべてのウィンドウリストを表示
Ctrl + at -> time、現在の時刻とシステム負荷を表示します
Ctrl + ak -> ウィンドウを強制終了、現在のウィンドウを強制的に閉じる
Ctrl + a -> コピーモードに入ります。コピーモードでは、vi と同じようにスクロールバック、検索、コピーができます。
Cb 後方、PageUp
Cf 進む、PageDown
H(大文字)ハイ、カーソルを左上隅に移動する
L 低、カーソルを左下隅に移動する
0 行の先頭へ移動
$ 行末
w 1単語進む、単語単位で進む
b 1単語後ろに移動、1単語後ろに移動
スペースキーを最初に押すとエリアの開始点がマークされ、2 回目に押すと終了点がマークされます。
Esc でコピーモードを終了
Ctrl + a ] -> 貼り付け、コピーモードで選択した内容を貼り付けます

操作例については、https://wangchujiang.com/linux-command/c/screen.html を参照してください。

3. デーモン化ツール

##git clone git://github.com/bmc/daemonize.git をインストールします
sh configure && make && sudo make install

-a #デフォルト値をフラッシュする代わりに出力ファイルにマウントします。 -e および/または -o が指定されている場合にのみ適用されます。
-e # 出力標準エラーを指定されたファイルにリダイレクトし、/dev/nullを置き換えます
-o #出力標準を指定されたファイルにリダイレクトし、/dev/nullを置き換えます
-E name=value # バックグラウンド プログラムに環境変数を追加します。このパラメータ タイプは、名前 = 値の形式である必要があります。パラメータは複数回設定できます。
-c ディレクトリ #コマンドを実行する前にディレクトリをカスタマイズします。
-p pidfile #独自の pid 保存場所をカスタマイズします。
-l lockfile #このファイルは、単一のインスタンスが起動されるときにチェックされます。
-u user #プログラムを実行するユーザーをカスタマイズします。

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

以下もご興味があるかもしれません:
  • Linux に Redis をインストールし、バックグラウンドで実行し、システムが自動的に起動するように設定する方法
  • Linux でバックグラウンドで実行中のプログラムを表示して終了する方法
  • Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)
  • Linux で jar パッケージを起動してバックグラウンドで実行する方法
  • Linux で実行中のバックグラウンド プログラムを表示および終了する方法
  • Linux でバックグラウンド タスクを実行するために nohup と screen を使用する例と違いの簡単な分析
  • LinuxのバックグラウンドでPythonプログラムを実行するいくつかの方法
  • Linux のバックグラウンドで Springboot を実行する方法
  • Linux バックグラウンドでノード サービス コマンドを実行する方法
  • Python Nohup Linux バックグラウンド実行出力の問題を解決する
  • Linux でバックグラウンドでプロセスを確実に実行する方法の概要
  • Linuxのバックグラウンド操作とシャットダウンの詳細な説明、バックグラウンドタスクの表示
  • Linuxコマンドをバックグラウンドで実行する方法

<<:  MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能

>>:  WeChatアプレット実装アンカー位置決め機能の例

推薦する

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

MySQL 条件付きクエリと使用法および優先順位の例の分析

この記事では、例を使用して、MySQL 条件クエリ and or の使用方法と優先順位を説明します。...

Dockerはコード検出プラットフォームSonarQubeを構築し、Mavenプロジェクトのプロセスを検出します

1 はじめに優れたコーディング習慣は優れたプログラマーが備えるべき資質ですが、コードの品質を保証する...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...

Alibaba Cloud Centos6.X でメールを送信する際に発生するさまざまな問題

序文: Webサービスを提供するために、Alibabaクラウドホストを新しくインストールしました。す...

MySQL 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...

Windows で mysql-8.0.18-winx64 をインストールするチュートリアル (画像とテキスト付き)

1. インストールパッケージをダウンロードするインストール パッケージは次の場所にあります:参考:...

床スクロール効果を実現する js

この記事ではjQueryを使用して、階段のスライド効果を実装し、フロアをスクロールし、フロアボタンを...

HTML、CSS、RSSフィードが正しいかどうかを確認する無料ツール

この種のエラーに対処するための 1 つの方法は、まずマークアップとスタイルシートを検証することです。...

Linux で gdb を使用してコア ファイルをデバッグする方法

1.コアファイルプログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログ...

MySQL の pid とソケットの詳細な説明

目次1. pidファイルの紹介2.ソケットファイルの紹介要約:ソケット ファイル: Unix ドメイ...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

JavaScript は詳細なコードで星座クエリ機能を実装します

目次1. タイトル2. コード3. 結果IV. 結論1. タイトルテキスト ボックスに誕生日の値を入...

nginx をベースにリロードなしでアップストリーム サーバーの動的な自動起動と停止を実装する方法

目次1. Consulクラスタをデプロイする1. 準備3. Consulクラスタを作成する4. 管理...