序文 プロセス管理の役割:
この記事では、Linux プロセス管理コマンドについて詳しく説明し、これらの主要なコマンドを使用してプロセス全体を通じてアプリケーションを管理する方法について説明します。 一般的に、アプリケーション プロセスのライフ サイクルには、開始、実行、停止という 3 つの主要な状態があります。私たちが有能な管理者になりたいのであれば、それぞれの州は注意深く管理できるし、またそうすべきです。これら 8 つのコマンドを使用して、プロセスのライフ サイクル全体を管理できます。 プロセスを開始する プロセスを開始する最も簡単な方法は、コマンド ラインでプロセスの名前を入力して Return キーを押すことです。 Nginx Web サーバーを起動する場合は、「nginx」と入力します。おそらく、そのバージョンだけを見たいだけなのでしょう。 アラン@ワークステーション:~$ nginx アラン@ワークステーション:~$ nginx -v nginx バージョン: nginx/1.14.0 実行パスを確認してください 上記のプロセス起動のデモンストレーションでは、実行可能ファイルが実行可能パスにあることを前提としています。このパスを理解することは、プロセスを確実に起動および管理するための鍵となります。通常、管理者は目的に応じてこのパスをカスタマイズします。実行可能パスを確認するには、 alan@workstation:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin どれの 実行可能ファイルの完全なパスを表示するには、which コマンドを使用します。 alan@workstation:~$ どの nginx nginx のディレクトリ 例として、人気の Web サーバー ソフトウェア Nginx を使用します。 Nginx がインストールされていることを前提としています。コマンド 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 であることに注意してください。通常は、 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 にも当てはまります。したがって、 alan@workstation:~$ pgrep -a nginx 20881 nginx: マスタープロセス ./nginx -p /home/alan/web/prod/nginxsec 20882 nginx: ワーカープロセス 20895 nginx: マスタープロセス nginx 20896 nginx: ワーカープロセス
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 を応援していただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue が Bibibili のホームページを模倣する際の問題
①. エイリアス(CNAME)レコードの使用方法:前回の投稿のドメイン名解決では、A レコードの解...
注: MySQL5.7 で root パスワードをクラックするには、パスワード認証をスキップしてデー...
MySQL では、データベースの文字化けは一般的に文字セットを設定することで修正できますが、文字化け...
1. css: ドラッグテーブル.css @charset "UTF-8"; ....
Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...
目次導入なぜわざわざ?落とし穴のあるコミュニティソリューション(Vue を例に挙げる)現時点では良い...
前回の記事では、Promise を使用して小さなプログラム wx.request をカプセル化する実...
デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...
この記事では、MySQL ビューの原理と使用法についてまとめます。ご参考までに、詳細は以下の通りです...
Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテナ エンジンです...
この記事では、ネイティブ JS を使用して実装された実用的な Web ナビゲーション バー効果を紹介...
このとき、overflow:auto;(コードがコンテナの境界を超えたときにスクロールボックスを表示...
目次環境の準備始める1. GitLabリモートリポジトリがマイクロサービスプロジェクトを作成する2....
通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...
JSを使用して、参考用の簡単な計算機を完成させます。具体的な内容は次のとおりです。要件: 入力値は数...