GNU/Linux >> Linux の 問題 >  >> Linux

効果的なプロセス管理のための8つのLinuxコマンド

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

プロセスの開始

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

 alan @workstation:〜$ nginx 

alan @workstation:〜$ 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:〜$ which nginx 
/ opt / nginx / bin / nginx

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

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

Linuxターミナル

  • Linux用の上位7つのターミナルエミュレータ
  • Linuxでのデータ分析のための10個のコマンドラインツール
  • 今すぐダウンロード:SSHチートシート
  • 高度なLinuxコマンドのチートシート
  • Linuxコマンドラインチュートリアル

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

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

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

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

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

alan @workstation:〜$ which nginx
/ home / alan / web / prod / nginx / sbin / nginx

alan @workstation:〜$ nginx -v
nginxバージョン:nginx / 1.14.0
プロセスを実行し続ける

NOHUP

ログアウトしたり、端末を閉じたりすると、プロセスが実行されない場合があります。この特殊なケースは、実行するコマンドの前にnohupコマンドを付けることで回避できます。また、アンパサンド(&)を追加すると、プロセスがバックグラウンドに送信され、端末を引き続き使用できるようになります。たとえば、myprogram.shを実行するとします。

 nohup myprogram.sh & 

nohupが行う良いことの1つは、実行中のプロセスのPIDを返すことです。次にPIDについて詳しく説明します。

実行中のプロセスを管理する

Linuxターミナル

  • Linux用の上位7つのターミナルエミュレータ
  • Linuxでのデータ分析のための10個のコマンドラインツール
  • 今すぐダウンロード:SSHチートシート
  • 高度なLinuxコマンドのチートシート
  • Linuxコマンドラインチュートリアル

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

PS

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

 alan @workstation:〜$ ps 
PID TTY TIME CMD
23989 pts / 0 00:00:00 bash
24148 pts / 0 00:00:00 ps

以前に開始したNginxプロセスを表示したいと思います。これを行うために、実行中のすべてのプロセスを表示するようにpsに指示します( -e )および完全なリスト( -f

 alan @workstation:〜$ ps -ef 
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug18? 00:00:10 / sbin/initスプラッシュ
root2 0 0 Aug18? 00:00:00 [kthreadd]
root 4 2 0 Aug18? 00:00:00 [kworker / 0:0H]
root 6 2 0 Aug18? 00:00:00 [mm_percpu_wq]
root 7 2 0 Aug18? 00:00:00 [ksoftirqd / 0]
root 8 2 0 Aug18? 00:00:20 [rcu_sched]
root 9 2 0 Aug18? 00:00:00 [rcu_bh]
root 10 2 0 Aug18? 00:00:00 [migration / 0]
root 11 2 0 Aug18? 00:00:00 [watchdog / 0]
root 12 2 0 Aug18? 00:00:00 [cpuhp / 0]
root 13 2 0 Aug18? 00:00:00 [cpuhp / 1]
root 14 2 0 Aug18? 00:00:00 [watchdog / 1]
root 15 2 0 Aug18? 00:00:00 [migration / 1]
root 16 2 0 Aug18? 00:00:00 [ksoftirqd / 1]
alan 20506 20496 0 10:39 pts / 0 00:00:00 bash
alan 20520 1454 0 10:39? 00:00:00 nginx:マスタープロセスnginx
alan 20521 20520 0 10:39? 00:00:00 nginx:ワーカープロセス
alan 20526 20506 0 10:39 pts / 0 00:00:00 man ps
alan 20536 20526 0 10:39 pts / 0 00:00:00 pager
alan 20564 20496 0 10:40 pts / 1 00:00:00 bash

上記の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

pgrepコマンドは、grepを個別に呼び出す必要をなくすことで、作業をさらに簡素化するために作成されました。

 alan @workstation:〜$ pgrep nginx 
20520
20521

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

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

PIDOF

もう1つの気の利いたものはpidofです。このコマンドは、同じ名前の別のプロセスが実行されている場合でも、特定のバイナリのPIDをチェックします。例を設定するために、Nginxを2番目のディレクトリにコピーし、それに応じてプレフィックスを設定して開始しました。実際には、このインスタンスは、別のユーザーが所有するディレクトリなど、別の場所にある可能性があります。両方のNginxインスタンスを実行すると、 ps -ef 出力にはすべてのプロセスが表示されます。

 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

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

 top-11:56:28 up 1 day、13:37、1 user、load average:0.09、0.04、0.03 
Tasks:292 total、3 running、225 sleeping、0 stop、0 zombie
%Cpu(s):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 Mem:合計16387132、10854648無料、1859036使用、3673448バフ/ cache
KiBスワップ:合計0、0は無料、0は使用済み。 14176540 avail Mem

PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND
17270 alan 58 alan 20 0 816144 45416 29844 S 0.5 0.3 0:22.16 gnome-terminal-
21110 alan 20 0 41940 3988 3188 R 0.1 0.0 0:00.17 top
0 0.1 root
0 1 10.72 systemd
2 root 20 0 0 0 0 0:00.01 kthreadd
4 root 0 er 0 0〜10:0 0 0/0 0 0/0 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 更新間隔は、 sの文字を入力して変更できます。 その後に、更新に必要な秒数が続きます。 Nginxプロセスの例を簡単に監視できるように、topを呼び出し、 -pを使用してPIDを渡すことができます。 オプション。この出力ははるかにクリーンです。

 alan @workstation:〜$ top -p20881 -p20882 -p20895 -p20896 

タスク:合計4、実行中0、スリープ中4、停止中0、ゾンビ0
%Cpu(s ):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 Mem:合計16387132、10856008無料、1857648使用、3673476バフ/キャッシュ
KiBスワップ:合計0、0は無料、0は使用済み。 14177928 avail Mem

PID USER PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND
20881 alan 0:00 0 12016 0 12460 1644 932 S 0.0 0.0 0:00.00 nginx
20895 alan 20 0 12016 352 352 0 S 0.0 0.0 0:00.00 nginx
20896 alan 0 0:00.00 nginx
20896 alan 0.0 20>>

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

プロセスの停止 殺す

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

 1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP 
6)SIGABRT
6)SIGABRT 14)SIGALRM 15)SIGTERM

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

 alan @workstation:〜$ kill -9 20896 

alan @workstation:〜$ pgrep nginx
20881
20882
20895
22123

PKILL

コマンドpkillは、名前で検索できるという点でpgrepに似ています。これは、pkillを使用するときは非常に注意する必要があることを意味します。 Nginxを使用した私の例では、1つのNginxインスタンスのみを強制終了する場合は、Nginxを使用しない可能性があります。 Nginxオプションを渡すことができます-s 停止 特定のインスタンスに移動して強制終了するか、grepを使用して完全なps出力をフィルタリングする必要があります。

 / home / alan / web / prod / nginx / sbin / nginx -s stop 

/ home / alan / web / prod / nginxsec / sbin / nginx -s stop

pkillを使用したい場合は、 -fを含めることができます コマンドライン引数全体をフィルタリングするようにpkillに要求するオプション。もちろん、これはpgrepにも当てはまります。したがって、最初に pgrep -aで確認できます pkill -fを発行する前 。

 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などのプラットフォームに存在しますが、いくつかの違いがあります。コマンドラインで作業したり、スクリプトを記述したりするときは、常にテストし、必要に応じて修正する準備をしてください。


Linux
  1. すべてのユーザーに必要な20のLinuxコマンド

  2. Linuxパッケージ管理のためのAppImageの使用

  3. Linuxで効果的なファイル操作を行うためにテキストをフィルタリングするための12の便利なコマンド

  1. Webイメージを最適化するための私のお気に入りのLinuxコマンド

  2. 生産性のための3つの重要なLinuxチートシート

  3. 一般的なLinuxコマンドのチートシート

  1. ネットワーク診断用の10のLinuxコマンド

  2. Linuxコマンドの基本:プロセス管理用の7つのコマンド

  3. Linuxコマンド:プロセスの優先順位を操作する方法