通过 ps 指令获得制定进程名称的 pid 步骤如下:
1. 打印出全部进程的, 进程名称以及pid
ps -ef
大概会得到类似如下结果:
UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:01 ? 00:00:00 /sbin/init root 2 0 0 09:01 ? 00:00:00 [kthreadd] root 3 2 0 09:01 ? 00:00:00 [ksoftirqd/0] root 5 2 0 09:01 ? 00:00:00 [kworker/u:0] root 6 2 0 09:01 ? 00:00:00 [migration/0] root 7 2 0 09:01 ? 00:00:00 [watchdog/0] root 8 2 0 09:01 ? 00:00:00 [migration/1] root 10 2 0 09:01 ? 00:00:00 [ksoftirqd/1] root 12 2 0 09:01 ? 00:00:00 [watchdog/1]
2. 过滤出指定的进程名称
ps -ef | grep mysqld
大概会得到类似如下结果:
mysql 841 1 0 09:01 ? 00:00:02 /usr/sbin/mysqld xwsoul 4532 4205 0 11:16 pts/0 00:00:00 grep --color=auto mysqld
3. 这样就会多出一行我们刚刚的 grep mysqld 的结果, 因此我们要忽略该指令
ps -ef | grep mysqld | grep -v 'grep '
大概会得到类似如下的结果:
mysql 841 1 0 09:01 ? 00:00:02 /usr/sbin/mysqld
4. 使用 awk 打印出pid号
ps -ef | grep mysqld | grep -v 'grep ' | awk '{print $2}'
大概会得到类似如下的结果:
841
同样的如果像获得进程的父进程号(ppid), 可按如下操作:
ps -ef | grep mysqld | grep -v 'grep ' | awk '{print $3}'