Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,495,102字

该文章投稿至Nemo社区   Linux  板块 复制链接


Linux使用ps命令获取对应PID

发布于 2017/08/10 15:06 4,408浏览 0回复 1,343

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

假装需要查询操作系统中的mysql的进程:

$ ps -ef | grep mysql
root       784     1  0 Aug07 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql     1128   784  0 Aug07 ?        00:03:57 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
nemo 12443 12430  0 15:00 pts/2    00:00:00 grep --color=auto mysql

可以看到有三个mysql相关的进程。我们需要的是mysql的主进程,也就是第二个。所以这时候就需要排除下grep输出的进程和第一个mysqld_safe的进程。可以添加-v参数来进行关键字排除。

$ ps -ef | grep mysql | grep -v 'grep' | grep -v 'mysqld_safe'
mysql     1128   784  0 Aug07 ?        00:03:57 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

这时候就只剩下mysql的主进程了。最后再提取下进程号。上个指令中,可以看到,输出结果的第二列正是进程号,所以可以用awk命令来提取:

$ ps -ef | grep mysql | grep -v 'grep' | grep -v 'mysqld_safe' | awk '{print $2}'
1128

所以就得到了mysql的主进程号:1128.

点赞(0)
点了个评