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アプレット実装アンカー位置決め機能の例

推薦する

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

JavaScript スコープチェーンの基本原理のグラフィカルな説明

目次序文範囲1. スコープとは何ですか? 2. [[スコープ]] プロパティ3. スコープチェーン4...

Linux システムで Code Cloud にプロジェクトをアップロードする方法

Code Cloudで新しいプロジェクトtest1を作成します。 公開鍵を取得するには次のコマンドを...

ミニプログラムカスタムコンポーネントの非効率的なグローバルスタイルの解決策

目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...

ユーザー エクスペリエンス デザイナーとは誰ですか?

怖いですね! 写真の翻訳: (内側から外側へ)最初のレイヤー:ユーザーエクスペリエンス第2層:コンテ...

インデックスとテーブルリターンをカバーするMySQLの使い方

インデックスの2つの主要なカテゴリ使用されるストレージエンジン: MySQL 5.7 InnoDBク...

mysql5.7 ユーザー権限の作成、ユーザーの削除、権限の取り消し

1. ユーザーを作成します。注文: 'password' によって識別される ...

Nginx セッション共有問題の解決策の分析

この記事は主に、Nginx セッション共有の問題に対する解決策を紹介します。記事内のサンプル コード...

CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

目次1. 環境2. 準備3. MySQL 8.0.11をインストールするMySQL 8 の公式バージ...

Vueはローカルストレージの追加、削除、変更機能を実装します

この記事では、ローカルストレージの追加、削除、変更を実装するためのVueの具体的なコードを例として紹...

シンプルなカウントダウン効果を実現するJavaScript

この記事の例では、カウントダウン効果を実現するためのJavaScriptの具体的なコードを参考までに...

Javascript Bootstrapのグリッドシステム、ナビゲーションバー、カルーセルの詳細な説明

目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...

冗長カーネルを削除するLinuxディープインの実装方法

前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...

Linux Tensorflow2.0のインストール問題を解決する

conda アップデート conda pip で tf-nightly-gpu-2.0-previ...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...