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

ps、pgrep、pkill などを使用して Linux のキル プロセスをマスターする

Linux でプロセスを管理することは、最初は新しいシステム管理者 (sysadmin) にとって困難に見えるかもしれません。しかし、少し説明とデモンストレーションを行うことで、Linux の kill プロセスを見つけて実行する方法を学ぶことができます。ps などのコマンドライン ツールを使用するだけです。 と kill .

この記事では、任意の Linux オペレーティング システムで、実行中のプロセスや異常なプロセスを見つけたり、実行中のプロセスを強制終了 (終了) したり、バックグラウンド プロセスを見つけたりするためのコマンドを学習します。

この記事の終わりまでに、Linux プロのようにコマンド ラインからプロセス ID 番号 (PID) に基づいてプロセスを管理できるようになります。 Linux のプロセス管理コマンドの詳細については、このまま読み進めてください!

前提条件

この記事では、Linux でプロセスを管理する方法について説明します。ハンズオンを希望する場合は、次のものが必要です。

  • 仮想マシンまたは物理マシンの Linux ホスト
  • PowerShell の例を試すには、PowerShell 7.1.1 をインストールしてください Linux ホスト上。
  • root 以外のユーザー アカウント。 root アクセスは必須ではありませんが、root ユーザーが別のユーザーの実行中のプロセスを強制終了できる例があります。

どの Linux ディストリビューションを使用するかは、あなた次第です。この記事は、Ubuntu 20.04 LTS に基づいています。ただし、コマンドは Linux オペレーティング システムの標準です。

始める準備はできましたか?よし、飛び込もう。

Linux でのプロセスの管理

場合によっては、Linux システムで実行中のプロセスを停止する必要があるシナリオに遭遇することがあります。例として、スケジュールに従って実行される bash スクリプトがあるとします。その bash スクリプトは、cron を介して別のユーザーとして実行するように構成されています ジョブ (Linux プロセス スケジューラ)。

このスクリプトは、スクリプトを失敗させる可能性のある誤ったプロセスを生成することがあります。システムを再起動したり、スクリプトを停止したりせずに、これらの誤ったプロセスを強制終了するにはどうすればよいでしょうか?

次のセクションでは、検索と終了または kill に使用されるコマンドについて説明します Linux システム上のプロセス。各セクションは、最後のセクションに基づいて作成されます。 psについて学びます 、 toppgrepkill 、および pkill コマンドはすべて Linux にネイティブです。

おまけとして、PowerShell の同等のコマンド Get-ProcessStop-Process Linux ネイティブ コマンドが好みでない場合は、含まれています。

プロセスを特定するためのツール

プロセスを強制終了する前に、ターゲットにする正しいプロセスを見つける必要があります。固有の PID により、正確なターゲティングが可能になります。終了のための正しいプロセスを見つける方法を学ぶために読んでください.

ps の使用 プロセス情報を表示するコマンド

プロセス ステータス または ps コマンドは、Linux システム上のアクティブなプロセスに関連する情報を表示します。実行中のプロセスだけでなく、バックグラウンド プロセスも見つけることができます ps で .

コマンド ps デフォルトでは、効果的なユーザー識別のすべてのプロセスが表示されます 現在のユーザーの (EUID)。 ps の実行 コマンドは、以下に示すように、ユーザーが終了できるすべての実行中のプロセスを返します。

ps

top を使用した拡張プロセス情報の検索 コマンド

実行中のプロセスやシステム メトリックに関する常に最新の情報を見つけたい場合は、top を使用できます。 指図。 ps とは異なります 、top コマンドは、設定された間隔で画面上のプロセス情報を更新します。

top を実行すると コマンドを実行すると、PID 以外の情報も表示されます。プロセスの詳細には、CPU とメモリのパーセンテージ、Nice 値 (CPU スケジューリング プロセスの優先度) が含まれます 、および Linux カーネルによって設定されたプロセス優先度 (PR)。

新しいまたは経験豊富なシステム管理者の場合、top コマンドは、多くの場合、重要なシステム リソースとプロセスを管理するための主要なツールです。以下に示すように、top コマンド出力は ps よりも多くのプロセス情報を表示します 全体的なシステム メトリックを含むコマンド。

htop top の拡張版です 色分けされた端末出力など、さまざまな改善が含まれています。

プロセスが消費しているメモリまたは CPU リソースを調べたいとします。その場合、 p を使用できます top の切り替え 以下に示すように。

top -p 2113

おそらく、特定のユーザー名で実行中のすべてのプロセスを表示する必要があります。 top コマンドは u を提供します 特定のユーザーのプロセスのみを表示するように切り替えます。以下の例に示すように、PID はユーザー ID bkindle のみに一致します。

top -u bkindle

pgrep による特定のプロセス PID の検索 コマンド

元々は Solaris コマンド pgrep Linux で使用するために移植されました。 grep の検索能力を組み合わせる コマンドと ps のプロセス管理 、 pgrep 対象とする正確なプロセスを柔軟に見つけることができます。

ps でも 詳細情報を表示します pgrep 返されたプロセスの PID のみを返すように設計されています。 pgrep 利用可能な多くの検索パラメータを使用してプロセスを見つけるのに役立ちます .次の例では、pgrep vmtoolsd に一致するプロセスを検索するように表示されます .

pgrep vmtoolsd

同様に、u でユーザー ID を指定します。 その特定のユーザーに関連付けられたプロセスのみを取得するように切り替えます。以下に示すように、ユーザー bkindle に対して単一の PID のみが返されます。 そして vmtoolsd

pgrep -u bkindle vmtoolsd

PowerShell の Get-Process によるプロセスの検索 Linux で

典型的な Linux コマンドはうまく機能しますが、PowerShell でも Linux プロセスを管理できることをご存知ですか? Get-Process コマンドレットは Linux ps と同様に機能します コマンドを実行し、プロセス情報を返します。たとえば、現在のユーザー bkindle によって実行中のすべてのプロセスを見つける必要があるとします。 .以下に示すように、すべての PID (Get-Process でラベル付けされた ID) を見つけます。 ) ユーザー bkindle の .

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

関連:PowerShell Where-Object を使用してすべてのものをフィルタリングする方法

さまざまなプロセスを見つける方法を学んだので、Linux でプロセスを終了または強制終了するすべての方法を発見するために読んでください!

Linux で kill コマンドを使用してプロセスを強制終了する

前のセクションでは、ネイティブ Linux および PowerShell コマンドを使用して、kill シグナルを送信するプロセスの PID を見つける方法を学習しました。次のセクションでは、kill の使用方法について説明します。 そして pkill プログラム、それに関連するシグナル、およびコマンドライン スイッチ。

Linux シグナルとプロセス管理

シグナルは、Linux がオペレーティング システムで実行されているプロセスと通信するために使用する方法です。 kill の 3 つの主要なシグナル プロセスを終了するために使用するコマンドは次のとおりです:

  • 1 (SIGHUP) – 対話型プログラムを終了し、プロセスが使用する構成ファイルをデーモン (バックグラウンド サービス) に再読み込みさせます。
  • 9 (SIGKILL) – 正常なシャットダウン タスクを実行せずにプロセスを強制的に終了します。
  • 15 (SIGTERM) – 終了時に開いているファイルを閉じるなど、プロセスが正常に終了できるようにします。これは、kill コマンドの使用時に番号が指定されていない場合に使用されるデフォルトのシグナルです。

この記事では、プロセスを強制終了するために使用される 3 つの主要なシグナルのみに焦点を当てていますが、合計 64 の利用可能なシグナルがあります。 kill -l を使用 シグナルとそれに対応する番号のリストを取得します。

プロセスの終了に使用される 3 つの主なシグナルを理解したので、次のセクションでプロセスを強制終了する方法を学びます。

kill の使用 プロセスを終了するコマンド

この次の例では、kill を使用します。 指図。 pwsh という名前の PowerShell インスタンスを実行していると仮定します。 、割り当てられた PID は 22687 です。このプロセスを終了する 1 つの方法を以下に示します。

<オール>
  • pgrep pwsh を使用 プロセス pwsh の PID を決定する 、 kill で使用 コマンド
  • kill -s TERM 22687 を使用 pwsh を終了するには 優雅に処理します。 TERM コマンドは 15 (SIGTERM) シグナルにマップされ、s を使用して示されます kill のパラメータ コマンド
  • お好みの top を使用してください 、 ps 、または pgrep PID がリストされていないことを確認します。
  • 以下に示すのは、Ubuntu 20.04 LTS bash ターミナルからの上記のプロセスの例です。

    killall コマンドは、PID ではなく名前に基づいてすべてのプロセスを終了するため、不注意に使用すると、このコマンドは非常に破壊的になります。ただし、このコマンドを使用する場合は、i を使用してください。 コマンドに確認を求めるオプション

    pkill を使用した名前によるプロセスの強制終了

    kill コマンドはプロセス ID でのみ機能します。これにより、プロセスの終了が複雑な複数ステップのプロセスになる可能性があります。 pkill procps および procps-ng に含まれるコマンド 検索された名前に基づいてプロセスを終了します。

    機能的には pkill コマンドは pgrep のラッパーとして機能します プログラム。 pkill コマンドは、端末に PID をリストするだけでなく、見つかった各プロセスに指定されたシグナルを送信します。 pkill kill とは異なります その pkill で PID ではなく、プロセスの名前のみを使用できます。

    pkill コマンドは、デフォルトでは、Ubuntu 20.04 LTS では使用できません。アプリケーションをダウンロードしてインストールする必要があります。これを行うには、sudo apt install mcollective-plugins-process -y を実行します。 .

    pkill を使用してプロセスを強制終了するには 、次の手順を実行します:

    <オール>
  • ps を使用 nano アプリケーション (コマンドライン テキスト エディター) が現在実行されていることを確認します。このステップはオプションですが、プロセスを強制終了する前の安全チェックです。
  • pkill -9 nano を使用 nano アプリケーションを強制終了します。
  • 以下に示すのは、Ubuntu 20.04 LTS bash ターミナルからの上記のプロセスの例です。

    Top によるプロセスの強制終了 コマンド

    top を実行すると 実行中のプロセスを表示するコマンド、k で特定のプロセスを強制終了できます キーストローク。強制終了するプロセスの PID を求める対話型のプロンプトが表示されます。

    以下に示すように、top を実行します。 コマンドを入力して k を押します。 強制終了する PID を入力し、Enter キーを押します キーで PID をすぐに終了します。

    次に、PowerShell Stop-Process を使用して、ネイティブ Linux コマンドに代わるもう 1 つの方法を学習します。 コマンド!

    PowerShell Stop-Process の使用 プロセスを終了するコマンド

    Linux ネイティブ コマンドが好みでない場合は、PowerShell で対応できます。 kill と同じように コマンド、 Stop-Process を使用してプロセスを終了できます Linux のコマンドレット。もう一度、PowerShell pwsh を実行しているとします。

    <オール>
  • Get-Process -ProcessName 'pwsh' で PID を見つける 終了する PID に注意してください。
  • Stop-Process -Id 29992,30014 を使用 返された複数のプロセスを終了します。
  • Get-Process -ProcessName 'pwsh' を使用 PID、29992 を確認します。 と 30014
  • Get-Process も使用できます そして kill 1 つまたは複数のプロセスを終了するメソッド:(Get-Process -Id [PID]).Kill() または (Get-Process -Id [PID1,2,3,4]).Kill() .

    ProcessName を使用するときは注意してください パラメータ。このパラメータを使用すると、killall と同様に動作します コマンドを実行し、すべてのプロセスを強制終了します 提供された名前と一致します。

    以下は、Ubuntu 20.04 LTS bash ターミナルからの上記のプロセスの例です。

    次のステップ

    Linux でプロセスを見つけて終了する多くの方法を知っているはずです。次の課題として、SSH 接続を使用してプロセスをリモートで強制終了するか、コンテナーで実行されている可能性のあるプロセスを強制終了してみてください。

    関連:Linux 世界の Windows ガイ:Linux での SSH のセットアップ


    Linux
    1. コマンドを使用してLinuxでプロセスを強制終了する方法は?

    2. Javaプロセスを強制終了するLinuxスクリプト.

    3. pgrep によって返されたすべてのプロセスを強制終了する方法

    1. Linuxでゾンビプロセスを見つけて殺す方法

    2. Kill、Pkill、Killallの違いは?

    3. Linux:所有されていないプロセスを表示して強制終了する

    1. killとkillallを使用したLinuxでのプロセスの管理

    2. Linuxでプロセスを強制終了する方法は?終了するコマンド

    3. Linux:ゾンビ プロセスを見つけて強制終了する