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.