Linux でプロセスを効果的に管理するための 8 つのコマンド

Linux でプロセスを効果的に管理するための 8 つのコマンド

序文

プロセス管理の役割:

  • サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率など) を分析して、サーバーの負荷とセキュリティ状態を判定します。
  • システム内のすべてのプロセスを表示する
  • プロセスの終了

この記事では、Linux プロセス管理コマンドについて詳しく説明し、これらの主要なコマンドを使用してプロセス全体を通じてアプリケーションを管理する方法について説明します。

一般的に、アプリケーション プロセスのライフ サイクルには、開始、実行、停止という 3 つの主要な状態があります。私たちが有能な管理者になりたいのであれば、それぞれの州は注意深く管理できるし、またそうすべきです。これら 8 つのコマンドを使用して、プロセスのライフ サイクル全体を管理できます。

プロセスを開始する

プロセスを開始する最も簡単な方法は、コマンド ラインでプロセスの名前を入力して Return キーを押すことです。 Nginx Web サーバーを起動する場合は、「nginx」と入力します。おそらく、そのバージョンだけを見たいだけなのでしょう。

アラン@ワークステーション:~$ nginx

アラン@ワークステーション:~$ nginx -v
nginx バージョン: nginx/1.14.0

実行パスを確認してください

上記のプロセス起動のデモンストレーションでは、実行可能ファイルが実行可能パスにあることを前提としています。このパスを理解することは、プロセスを確実に起動および管理するための鍵となります。通常、管理者は目的に応じてこのパスをカスタマイズします。実行可能パスを確認するには、 echo $PATH使用できます。

alan@workstation:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

どれの

実行可能ファイルの完全なパスを表示するには、which コマンドを使用します。

alan@workstation:~$ どの nginx
nginx のディレクトリ

例として、人気の Web サーバー ソフトウェア Nginx を使用します。 Nginx がインストールされていることを前提としています。コマンドwhich nginx何も返さない場合は、指定した実行可能パスのみを検索するため、Nginx は見つかりません。プロセスを名前だけで起動できない状況を解決する方法は 3 つあります。 1 つ目は、完全なパスを入力することです。ただし、全部を入力するのは嫌いです。あなたはどうですか?

alan@workstation:~$ /home/alan/web/prod/nginx/sbin/nginx -v
nginx バージョン: nginx/1.14.0

2 番目の解決策は、実行可能ファイルのパスにあるディレクトリにアプリケーションをインストールすることです。ただし、特にルート権限を持っていない場合、これが常に可能であるとは限りません。

3 番目の解決策は、実行可能パス環境変数を更新して、使用する特定のアプリケーションのインストール ディレクトリを含めることです。このソリューションはシェルに依存します。たとえば、Bash ユーザーは .bashrc ファイルの PATH= 行を編集する必要があります。

PATH="$HOME/web/prod/nginx/sbin:$PATH"

ここで、echo コマンドと which コマンドを繰り返し実行するか、バージョンを確認してください。はるかに簡単です!

alan@workstation:~$ echo $PATH
/home/alan/web/prod/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

alan@workstation:~$ どの nginx
/home/alan/web/prod/nginx/sbin/nginx

アラン@ワークステーション:~$ nginx -v            
nginx バージョン: nginx/1.14.0

プロセスを継続する

ノーアップ

ログアウトしたり、ターミナルを閉じると、プロセスの実行が継続されない場合があります。この特殊なケースは、プロセスの実行を継続するために実行するコマンドの前に nohup コマンドを置くことで解決できます。さらに、アンパサンドを追加すると、プロセスがバックグラウンドに送信され、ターミナルを引き続き使用できるようになります。たとえば、myprogram.sh を実行するとします。

nohup myprogram.sh &

nohup は実行中のプロセスの PID を返します。次にPIDについて詳しく説明します。

実行中のプロセスの管理

各プロセスには一意のプロセス識別番号 (PID) があります。この番号は各プロセスを管理するために使用されるものです。プロセス名を使用することもできます。これについては以下で説明します。実行中のプロセスのステータスを確認するためのコマンドがいくつかあります。これらのコマンドを簡単に見てみましょう。

追伸

最も一般的なのは ps コマンドです。 ps のデフォルトの出力は、現在の端末で実行されているプロセスの単純なリストです。以下に示すように、最初の列には PID が含まれています。

アラン@ワークステーション:~$ ps
PID TTY 時間 コマンド
23989 ポイント/0 00:00:00 バッシュ
24148 ポイント/0 00:00:00 ps

先ほど開始した Nginx プロセスを確認したいと思います。これを行うには、実行中のすべてのプロセス ( -e ) と完全なリスト ( -f ) を表示するように ps に指示します。

アラン@ワークステーション:~$ ps -ef
UID PID PPID C STIME TTY 時間 コマンド
ルート 1 0 0 Aug18 ? 00:00:10 /sbin/init スプラッシュ
ルート 2 0 0 8月18日 ? 00:00:00 [kthreadd]
ルート 4 2 0 8月18日 ? 00:00:00 [kworker/0:0H]
ルート 6 2 0 8月18日 ? 00:00:00 [mm_percpu_wq]
ルート 7 2 0 8月18日 ? 00:00:00 [ksoftirqd/0]
ルート 8 2 0 8月18日 ? 00:00:20 [rcu_sched]
ルート 9 2 0 8月18日 ? 00:00:00 [rcu_bh]
ルート 10 2 0 Aug18 ? 00:00:00 [移行/0]
ルート 11 2 0 8月18日 ? 00:00:00 [ウォッチドッグ/0]
ルート 12 2 0 8月18日 ? 00:00:00 [cpuhp/0]
ルート 13 2 0 8月18日 ? 00:00:00 [cpuhp/1]
ルート 14 2 0 8月18日 ? 00:00:00 [ウォッチドッグ/1]
ルート 15 2 0 Aug18 ? 00:00:00 [移行/1]
ルート 16 2 0 8月18日 ? 00:00:00 [ksoftirqd/1]
アラン 20506 20496 0 10:39 ポイント/0 00:00:00 バッシュ
alan 20520 1454 0 10:39 ? 00:00:00 nginx: マスタープロセス nginx
alan 20521 20520 0 10:39 ? 00:00:00 nginx: ワーカープロセス
アラン 20526 20506 0 10:39 pts/0 00:00:00 男 ps
アラン 20536 20526 0 10:39 pts/0 00:00:00 ポケベル
アラン 20564 20496 0 10:40 ポイント/1 00:00:00 バッシュ

上記の ps コマンドの出力で Nginx プロセスを確認できます。このコマンドは約 300 行を表示しますが、この例では短縮しています。ご想像のとおり、300 行のプロセス情報を処理しようとすると、少し混乱します。この出力を grep にパイプして、nginx のみを表示するようにフィルタリングできます。

alan@workstation:~$ ps -ef |grep nginx
alan 20520 1454 0 10:39 ? 00:00:00 nginx: マスタープロセス nginx
alan 20521 20520 0 10:39 ? 00:00:00 nginx: ワーカープロセス

確かに良いですね。 Nginx には PID 20520 と 20521 があることがすぐにわかります。

グレップ

pgrep コマンドは、grep のみを呼び出すことによって発生する問題をさらに簡素化します。

alan@workstation:~$ pgrep nginx
20520
20521

複数のユーザーが複数の異なる Nginx インスタンスを実行しているホスティング環境にいるとします。 -u オプションを使用して、出力から他のものを除外できます。

alan@workstation:~$ pgrep -u alan nginx
20520
20521

ピドフ

もう一つの便利なツールは pidof です。このコマンドは、同じ名前の別のプロセスが実行中の場合でも、特定のバイナリの PID をチェックします。例を設定するために、Nginx を 2 番目のディレクトリにコピーし、対応するパス プレフィックスを使用して起動しました。実際には、このインスタンスは、別のユーザーが所有するディレクトリなど、別の場所にある可能性があります。 2 つの Nginx インスタンスを実行すると、pidof 出力にすべてのプロセスが表示されます。

alan@workstation:~$ ps -ef |grep nginx
alan 20881 1454 0 11:18 ? 00:00:00 nginx: マスタープロセス ./nginx -p /home/alan/web/prod/nginxsec
alan 20882 20881 0 11:18 ? 00:00:00 nginx: ワーカープロセス
alan 20895 1454 0 11:19 ? 00:00:00 nginx: マスタープロセス nginx
alan 20896 20895 0 11:19 ? 00:00:00 nginx: ワーカープロセス

grep または pgrep を使用すると PID 番号が表示されますが、どのインスタンスがどれであるかはわからない場合があります。

alan@workstation:~$ pgrep nginx
20881
20882
20895
20896

pidof コマンドを使用すると、特定の Nginx インスタンスの PID を判別できます。

alan@workstation:~$ pidof /home/alan/web/prod/nginxsec/sbin/nginx
20882 20881

alan@workstation:~$ pidof /home/alan/web/prod/nginx/sbin/nginx
20896 20895

トップ

top コマンドは長い間使用されており、実行中のプロセスの詳細を表示したり、メモリ消費などの問題をすばやく特定したりするのに非常に便利です。デフォルトのビューを以下に示します。

トップ - 11:56:28 1 日前、13:37、ユーザー 1 人、負荷平均: 0.09、0.04、0.03
タスク: 合計 292、実行中 3、スリープ中 225、停止中 0、ゾンビ 0
%CPU: 0.1 us、0.2 sy、0.0 ni、99.7 id、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB メモリ: 合計 16387132、空き 10854648、使用済み 1859036、バッファ/キャッシュ 3673448
KiB スワップ: 合計 0、空き 0、使用済み 0。利用可能なメモリ 14176540

 PID ユーザー PR NI 仮想リソース SHR S %CPU %MEM 時間+ コマンド
17270 アラン 20 0 3930764 247288 98992 R 0.7 1.5 5:58.22 gnome-shell
20496 アラン 20 0 816144 45416 29844 S 0.5 0.3 0:22.16 gnome-terminal-
21110 アラン 20 0 41940 3988 3188 R 0.1 0.0 0:00.17 トップ
 1 ルート 20 0 225564 9416 6768 S 0.0 0.1 0:10.72 systemd
 2 ルート 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
 4 ルート 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
 6 ルート 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
 7 ルート 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0

文字 s と更新に必要な秒数を入力することで、更新間隔を変更できます。サンプルの Nginx プロセスを簡単に監視できるように、-p オプションを指定して top を呼び出し、PID を渡すことができます。この出力ははるかにきれいです。

アラン@ワークステーション:~$ トップ -p20881 -p20882 -p20895 -p20896

タスク: 合計 4、実行中 0、スリープ中 4、停止中 0、ゾンビ 0
%CPU: 2.8 us、1.3 sy、0.0 ni、95.9 id、0.0 wa、0.0 hi、0.0 si、0.0 st
KiB メモリ: 合計 16387132、空き 10856008、使用中 1857648、バッファ/キャッシュ 3673476
KiB スワップ: 合計 0、空き 0、使用済み 0。利用可能なメモリ 14177928

 PID ユーザー PR NI 仮想リソース SHR S %CPU %MEM 時間+ コマンド
20881 アラン 20 0 12016 348 0 S 0.0 0.0 0:00.00 nginx
20882 アラン 20 0 12460 1644 932 S 0.0 0.0 0:00.00 nginx
20895 アラン 20 0 12016 352 0 S 0.0 0.0 0:00.00 nginx
20896 アラン 20 0 12460 1628 912 S 0.0 0.0 0:00.00 nginx

プロセスを管理するとき、特にプロセスを終了するときには、PID を正しく特定することが非常に重要です。さらに、top をこのように使用する場合、これらのプロセスのいずれかが停止したり、新しいプロセスが開始したりするたびに、top に新しいプロセスを通知する必要があります。

プロセスの終了

殺す

興味深いことに、停止コマンドはありません。 Linux には kill コマンドがあります。 kill はプロセスにシグナルを送信するために使用されます。最もよく使用されるシグナルは、「終了」( SIGTERM )または「強制終了」( SIGKILL )です。しかし、それだけではありません。いくつか例を挙げます。完全なリストは kill -L を使用して表示できます。

 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) シガバRT 7) シグバス 8) SIGFPE 9) シグキル 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

シグナル番号 9 は SIGKILL であることに注意してください。通常は、 kill -9 20896などのコマンドを発行します。デフォルトのシグナルは 15 (SIGTERM) です。多くのアプリケーションには独自の停止方法があることに留意してください。 Nginx は -s オプションを使用して、stop や reload などのシグナルを渡します。一般的に、アクションを停止するには、アプリケーション固有のメソッドを使用することを好みます。ただし、kill コマンドを使用して Nginx プロセス 20896 を停止し、pgrep を使用して停止したことを確認する方法を説明します。 PID 20896 は表示されなくなりました。

alan@workstation:~$ キル -9 20896
 
alan@workstation:~$ pgrep nginx
20881
20882
20895
22123

キル

pkill コマンドは、名前で検索できるという点で pgrep に似ています。つまり、pkill を使用するときは非常に注意する必要があります。私の Nginx の例では、1 つの Nginx インスタンスだけを終了したい場合、おそらくそれを使用することを選択しないでしょう。これを排除するには、特定のインスタンスに Nginx オプション -s stop を渡すことができます。または、grep を使用して ps 出力全体をフィルターする必要があります。

/home/alan/web/prod/nginx/sbin/nginx -s 停止
/home/alan/web/prod/nginxsec/sbin/nginx -s 停止

pkill を使用する場合は、-f オプションを指定して、pkill にコマンドライン引数全体をフィルターさせることができます。もちろんこれは pgrep にも当てはまります。したがって、 pkill -fを実行する前に、まずpgrep -aで確認できます。

alan@workstation:~$ pgrep -a nginx
20881 nginx: マスタープロセス ./nginx -p /home/alan/web/prod/nginxsec
20882 nginx: ワーカープロセス
20895 nginx: マスタープロセス nginx
20896 nginx: ワーカープロセス

pgrep -fを使用して結果を絞り込むこともできます。同じ引数を持つ pkill はプロセスを停止します。

alan@workstation:~$ pgrep -f nginxsec
20881
           
alan@workstation:~$ pkill -f nginxsec

pgrep (特に pkill) について覚えておくべき重要なことは、間違ったプロセスに誤って影響を与えないように、検索結果が正確であることを常に確認する必要があるということです。

これらのコマンドのほとんどには多くのコマンドライン オプションがあるため、各コマンドのマニュアル ページを必ず読むことをお勧めします。これらのコマンドのほとんどは Linux、Solaris、BSD などのプラットフォームに存在しますが、いくつかの違いがあります。コマンドラインで作業したりスクリプトを作成したりするときは、常にテストを行い、必要に応じて修正できるように準備しておいてください。

出典: https://opensource.com/article/18/9/linux-commands-process-management

著者: Alan Formy-Duval トピック: lujun9972 翻訳者: heguangzhi 校正者: wxy

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Linux プロセス制御の詳細な説明と例
  • Linux でプロセスを制御するコマンドの概要
  • Supervisor のインストールと構成の詳細な説明 (Linux/Unix プロセス管理ツール)
  • Linuxの運用と保守の基本プロセス管理と環境構成分析

<<:  Vue が Bibibili のホームページを模倣する際の問題

>>:  設定ファイルを書いてMyBatisを簡単に使う方法

推薦する

Vue+js 矢印をクリックして画像を切り替える

この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...

Vue で動的パラメータと計算プロパティを使用する方法

1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...

MySQLのユーザー管理とPostgreSQLのユーザー管理の違い

1. MySQL ユーザー管理[例1.1] ローカルMySQLサーバーのテストデータベースにroot...

Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...

CSS カウンターを使用して数字の順序付きリストを美しく表示する方法

Web デザインでは、Web サイトに表示されるデータの構造とコンテンツをユーザーが明確に理解できる...

bodyタグの主な属性の概要

bgcolor="テキストの色" background="背景画像&q...

統計量に対するmySql SQLクエリ操作

余計なことは言わないで、コードだけ見てみましょう〜 プロジェクト番号を選択、 sum(case wh...

React クラスコンポーネントのライフサイクルと実行順序

1. Reactコンポーネントを定義する2つの方法1. 関数コンポーネント。単純な関数コンポーネント...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

JS のオブジェクトリテラルの詳細な説明

目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...

ウェブページ作成のヒントのまとめ

序文この記事は主に、日常の Web ページ制作で遭遇する問題解決スキルの一部をまとめ、皆さんの参考と...

HTML文書の基本構造(Webページ作成の基礎知識)

HTMLの動作原理: 1. ローカル操作: ブラウザでhtmlファイルを開く2. リモートアクセス...

MySQL の条件文で 1 つの情報しか読み取れない問題に対する 2 つの解決策

今日、私の同僚が MYSQL クエリ ステートメントの作成時に非常に奇妙な問題に遭遇しました。MyS...