ホームページ >運用・保守 >Linuxの運用と保守 >Linux でプロセスをクエリするコマンドは何ですか?

Linux でプロセスをクエリするコマンドは何ですか?

青灯夜游
青灯夜游オリジナル
2022-04-13 16:04:5022769ブラウズ

プロセスをクエリするためのコマンド: 1. ps コマンド (構文 "ps aux" または "ps -le" を使用して、システム内で実行中のすべてのプロセスの詳細情報を表示できます); 2. top コマンド (次のことができます)プロセスの実行状況をリアルタイムで監視する、構文は「top option」です; 3. pstree コマンドはプロセス ツリーを表示し、プログラムとプロセスの関係をツリー構造で表示できます。

Linux でプロセスをクエリするコマンドは何ですか?

#このチュートリアルの動作環境: CentOS 6 システム、Dell G3 コンピューター。

プロセスとは、実行されるプログラムまたはコマンドです。各プロセスは実行中のエンティティであり、独自のアドレス空間を持ち、特定のシステム リソースを占有します。

Linux システム管理者であっても、一般ユーザーであっても、システム プロセスの実行ステータスを監視し、制御不能になったプロセスを適時に終了することは日常的な作業です。

Linux ではプロセス管理にコマンドが使用されますが、プロセス管理の主な目的は同じです。つまり、システム内で実行されているプログラムとプロセスを表示し、サーバーの健全性状態を判断し、強制的にプロセスを管理することです。不要なプロセスを終了させます。

それでは、Linux でプロセスをクエリするコマンドは何でしょうか?次の記事では、Linux クエリ処理コマンドをいくつか紹介します。

Linux ps コマンド: 実行中のプロセスの表示

ps コマンドは、プロセスを監視するために最も一般的に使用されるコマンドです。このコマンドを使用して、実行中のプロセスを表示できます。システム で実行中のすべてのプロセスに関する詳細情報。

ps コマンドの基本的な形式は次のとおりです:

[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps -le
#查看系统中所有的进程,使用 Linux 标准命令格式

オプション:

  • a: セッションを除く、端末のすべてのプロセスを表示します。 leader;

  • u: プロセスに属するユーザーとメモリ使用量を表示します;

  • #x: 端末を制御しないプロセスを表示します。

  • -l: 詳細情報を長い形式で表示;

  • -e: すべてのプロセスを表示;

# は表示できます はい、ps コマンドは少し異なります。コマンド「ps aux」など、一部のオプションには「-」を含めることはできません。「aux」はオプションですが、「-」は含めることができません。その前に含まれています。

「man ps」コマンドを実行すると、ps コマンドのヘルプには、さまざまな UNIX 系システムに適応するために利用できる形式が多数用意されていることがわかりますが、覚えるのは不便です。したがって、いくつかの固定オプションを覚えておくことをお勧めします。例:

  • "ps aux" はシステム内のすべてのプロセスを表示でき、

  • "ps -le" はシステム内のすべてのプロセスを表示できます。 system にアクセスすると、プロセスの親プロセスの PID とプロセス優先度も確認できます。

  • "ps -l" では、現在のシェルによって生成されたプロセスのみが確認できます。

これら 3 つのコマンドで十分です。個別に確認してみましょう。

[例 1]

[root@localhost ~]# ps aux
#查看系统中所有的进程
USER PID %CPU %MEM  VSZ  RSS   TTY STAT START TIME COMMAND
root   1  0.0  0.2 2872 1416   ?   Ss   Jun04 0:02 /sbin/init
root   2  0.0  0.0    0    0   ?    S   Jun04 0:00 [kthreadd]
root   3  0.0  0.0    0    0   ?    S   Jun04 0:00 [migration/0]
root   4  0.0  0.0    0    0   ?    S   Jun04 0:00 [ksoftirqd/0]
…省略部分输出…

表 1 に、上記の出力情報の各列の具体的な意味を示します。

#表 1 ps コマンド出力情報の意味 #HeaderMeaningこのプロセスを作成したユーザー。 プロセスの ID。 プロセスによって占有されている CPU リソースの割合。占有割合が高いほど、プロセスが消費するリソースが多くなります。 プロセスによって占有される物理メモリの割合。占有割合が高いほど、プロセスが消費するリソースが多くなります。 このプロセスによって占有される仮想メモリのサイズ (KB 単位)。 このプロセスが占有する実際の物理メモリ サイズ (KB 単位)。 このプロセスはどの端末で実行されていますか?このうち、tty1 ~ tty7 はローカル コンソール端末 (Alt F1 ~ F7 ショートカット キーで異なる端末を切り替えることができます)、tty1 ~ tty6 はローカル キャラクタ インターフェイス端末、tty7 はグラフィカル端末を表します。 pts/0 ~ 255 は仮想端末 (通常はリモート接続端末) を表し、最初のリモート接続は pts/0 を占有し、2 番目のリモート接続は pts/1 を占有し、順に増加します。 #STATプロセスのステータス。一般的な状態は次のとおりです。 -D: 復帰できないスリープ状態。通常は I/O 状況で使用されます。 -R: プロセスは実行中です。
##USER
PID
%CPU
%MEM
VSZ
RSS
TTY
    -S: プロセスはスリープ状態にあり、起動することができます。
  1. -T: 停止状態。バックグラウンドで一時停止されているか、プロセスがデバッグ状態にある可能性があります。
  2. -W: メモリ相互作用状態 (2.6 カーネル以降は無効)。
  3. -X: 停止したプロセス (表示されないはずです)。
  4. -Z: ゾンビプロセス。プロセスは終了しましたが、プログラムの一部がまだメモリ内に残っています。
  5. -<: 高優先度 (BSD 形式では次のステータスが発生します)。
  6. -N: 優先度が低い。
  7. -L: メモリにロックされています。
  8. -s: 子プロセスが含まれます。
  9. -l: マルチスレッド (小文字の L)。
  10. -: バックグラウンドにあります。
  11. #START
このプロセスの開始時刻。
TIME このプロセスには CPU のコンピューティング時間がかかりますが、システム時間ではないことに注意してください。
COMMAND このプロセスを生成するコマンド名。

【例 2】"ps aux"命令可以看到系统中所有的进程,"ps -le"命令也能看到系统中所有的进程。由于 "-l" 选项的作用,所以 "ps -le" 命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了。

[root@localhost ~]# ps -le
F S UID PID PPID C  PRI Nl ADDR  SZ WCHAN TTY      TIME  CMD
4 S   0   1    0 0  80   0 -    718 -     ?    00:00:02  init
1 S   0   2    0 0  80   0 -      0 -     ?    00:00:00  kthreadd
1 S   0   3    2 0 -40   - -      0 -     ?    00:00:00  migration/0
1 S   0   4    2 0  80   0 -      0 -     ?    00:00:00  ksoflirqd/0
1 S   0   5    2 0 -40   - -      0 -     ?    00:00:00  migration/0
…省略部分输出…

表 2 罗列出以上输出信息中各列的含义。

表 2 ps -le 命令输出信息
表头 含义
F 进程标志,说明进程的权限,常见的标志有两个:
  • 1:进程可以被复制,但是不能被执行;
  • 4:进程使用超级用户权限;
S 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID 运行此进程的用户的 ID;
PID 进程的 ID;
PPID 父进程的 ID;
C 该进程的 CPU 使用率,单位是百分比;
PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;
NI 进程的优先级,数值越小,该进程越早被执行;
ADDR 该进程在内存的哪个位置;
SZ 该进程占用多大内存;
WCHAN 该进程是否运行。"-"代表正在运行;
TTY 该进程由哪个终端产生;
TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
CMD 产生此进程的命令名;

【例 3】如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 "ps -l" 命令就足够了:

[root@localhost ~]# ps -l
#查看当前登录产生的进程
F S UID   PID  PPID C PRI NI ADDR SZ WCHAN TTY       TIME CMD
4 S 0   18618 18614 0  80  0 - 1681  -     pts/1 00:00:00 bash
4 R 0   18683 18618 4  80  0 - 1619  -     pts/1 00:00:00 ps

可以看到,这次从 pts/1 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。

Linux top命令:持续监听进程运行状态

ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

top 命令的基本格式如下:

[root@localhost ~]#top [选项]

选项:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

  • -p 进程PID:仅查看指定 ID 的进程;

  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

  • -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  • ? 或 h:显示交互模式的帮助;

  • P:按照 CPU 的使用率排序,默认就是此选项;

  • M:按照内存的使用率排序;

  • N:按照 PID 排序;

  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

  • r:按照 PID 给某个进程重设优先级(Nice)值;

  • q:退出 top 命令;

我们看看 top 命令的执行结果,如下:

[root@localhost ~]# top
top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 625344k total, 571504k used, 53840k free, 65800k buffers
Swap: 524280k total, 0k used, 524280k free, 409280k cached
PID   USER PR NI VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND
19002 root 20  0 2656 1068  856 R  0.3  0.2 0:01.87 top
1     root 20  0 2872 1416 1200 S  0.0  0.2 0:02.55 init
2     root 20  0    0    0    0 S  0.0  0.0 0:00.03 kthreadd
3     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/0
4     root 20  0    0    0    0 S  0.0  0.0 0:00.15 ksoftirqd/0
5     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/0
6     root RT  0    0    0    0 S  0.0  0.0 0:10.01 watchdog/0
7     root 20  0    0    0    0 S  0.0  0.0 0:05.01 events/0
8     root 20  0    0    0    0 S  0.0  0.0 0:00.00 cgroup
9     root 20  0    0    0    0 S  0.0  0.0 0:00.00 khelper
10    root 20  0    0    0    0 S  0.0  0.0 0:00.00 netns
11    root 20  0    0    0    0 S  0.0  0.0 0:00.00 async/mgr
12    root 20  0    0    0    0 S  0.0  0.0 0:00.00 pm
13    root 20  0    0    0    0 S  0.0  0.0 0:01.70 sync_supers
14    root 20  0    0    0    0 S  0.0  0.0 0:00.63 bdi-default
15    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kintegrityd/0
16    root 20  0    0    0    0 S  0.0  0.0 0:02.52 kblockd/0
17    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kacpid
18    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kacpi_notify

我们解释一下命令的输出。top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:

  • 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;

  • 第二部分从第六行开始,显示的是系统中进程的信息;

Linux pstree命令:查看进程树

pstree 命令是以树形结构显示程序和进程之间的关系,此命令的基本格式如下:

[root@localhost ~]# pstree [选项] [PID或用户名]

表 1 罗列出了 pstree 命令常用选项以及各自的含义。

表 1 pstree命令常用选项及含义
选项 含义
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
-c 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。
-n 根据进程 PID 号来排序输出,默认是以程序名排序输出的。
-p 显示进程的 PID。
-u 显示进程对应的用户名称。

需要注意的是,在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;反之,若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。

init 进程是系统启动的第一个进程,进程的 PID 是 1,也是系统中所有进程的父进程。

【例 1】

[root@1ocalhost ~]# pstree
init──┬──abrc-dump-oopa
├──abrtd
├──acpid
...省略部分输出...
├──rayslogd───3*[{rsyslogrd}]
#有3个rsyslogd进程存在
├──sshd───sshd───bash───pstree
#Pstree命令进程是在远程连接中被执行的
├──udevd───2*[udevd]
└──xinecd

【例 2】如果想知道某个用户都启动了哪些进程,使用 pstree 命令可以很容易实现,以 mysql 用户为例:

[root@1ocalhost ~]# pstree mysql
mysqid---6*[{mysqid}]

此输出结果显示了 mysql 用户对应的进程为 mysqid,并且 mysqid 进程拥有 5 个子进程(外加 1 个父进程,共计 6 个进程)。

Linux lsof命令:列出进程调用或打开的文件信息

我们知道,通过 ps 命令可以查询到系统中所有的进程,那么,是否可以进一步知道这个进程到底在调用哪些文件吗?当然可以,使用 lsof 命令即可。

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof 命令的基本格式如下:

[root@localhost ~]# lsof [选项]

此命令常用的选项及功能,如表 1 所示。

表 1 lsof 命令常用选项及功能
选项 功能
-c 字符串 只列出以字符串开头的进程打开的文件。
+d 目录名 列出某个目录中所有被进程调用的文件。
-u 用户名 只列出某个用户的进程打开的文件。
-p pid 列出某个 PID 进程打开的文件。

【例 1】

[root@localhost ~]# lsof | more
#查询系统中所有进程调用的文件
COMMAND PID  USER  FD    TYPE  DEVICE  SIZE/OFF  NODE  NAME
init               1      root    cwd  DIR    8,3       4096        2           /
init               1      root    rtd    DIR    8,3       4096        2           /
init               1      root    txt     REG   8,3       145180    130874 /sbin/init
init               1      root    mem REG   8,3       142472    665291 /lib/ld-2.12.so
init               1      root    mem REG   8,3       58704      655087 /lib/libnss_files-2.12.so
…省略部分输出…

这个命令的输出非常多。它会按照 PID,从 1 号进程开始列出系统中所有的进程正在调用的文件名。

【例 2】

[root@localhost ~]# lsof /sbin/init
#查询某个文件被哪个进程调用
COMMAND PID USER  FD  TYPE  DEVICE  SIZE/OFF  NODE    NAME
init               1     root    txt  REG   8,3      145180     130874   /sbin/init

lsof 命令也可以反过来查询某个文件被哪个进程调用。这个例子就查询到 /sbin/init 文件是被 init 进程调用的。

相关推荐:《Linux视频教程

以上がLinux でプロセスをクエリするコマンドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。