博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 获得进程号,Linux获得进程号
阅读量:5742 次
发布时间:2019-06-18

本文共 1816 字,大约阅读时间需要 6 分钟。

原帖地址:http://weyo.me/pages/techs/linux-get-pid/

导读

Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程,因此在获取进程

pid 上二者也有所区别。

交互式 Bash Shell 获取进程 pid

在已知进程名(name

)的前提下,交互式 Shell 获取进程 pid 有很多种方法,典型的通过 grep 获取 pid

的方法为(这里添加 -v grep是为了避免匹配到 grep

进程):

ps -ef | grep "name" | grep -v grep | awk '{print

$2}'

或者不使用 grep

(这里名称首字母加[]的目的是为了避免匹配到 awk 自身的进程):

ps -ef | awk '/[n]ame/{print $2}'

如果只使用 x 参数的话则 pid 应该位于第一位:

ps x | awk '/[n]ame/{print $1}'

最简单的方法是使用 pgrep

pgrep -f name

如果需要查找到 pid 之后 kill

掉该进程,还可以使用 pkill

pkill -f name

如果是可执行程序的话,可以直接使用 pidof

pidof name

Bash Shell 脚本获取进程 pid

根据进程名获取进程 pid

在使用 Shell 脚本获取进程 pid 时,如果直接使用上述命令,会出现多个 pid 结果,例如:

1

2

3

4

5

#! /bin/bash

# process-monitor.sh

process

=

$1

pid

=

$(

ps x | grep $process |

grep -v grep | awk '{print

$1}')echo $pid

执行 process-monitor.sh

会出现多个结果:

$> sh process-monitor.sh 3036 3098 3099

进一步排查可以发现,多出来的几个进程实际上是子 Shell 的(临时)进程:

root 3036 2905 0 09:03 pts/1 00:00:45

/usr/java/jdk1.7.0_71/bin/java ...name root 4522 2905 0 16:12 pts/1

00:00:00 sh process-monitor.sh name root 4523 4522 0 16:12 pts/1

00:00:00 sh process-monitor.sh name

其中 3036 是需要查找的进程pid,而 4522、4523 就是子 Shell 的 pid。

为了避免这种情况,需要进一步明确查找条件,考虑到所要查找的是 Java 程序,就可以通过 Java 的关键字进行匹配:

1

2

3

4

5

#! /bin/bash

# process-monitor.sh

process

=

$1

pid

=

$(

ps -ef | grep $process |

grep '/bin/java' | grep -v grep

| awk '{print

$2}')echo $pid

获取 Shell 脚本自身进程 pid

这里涉及两个指令: 1. $$

:当前 Shell 进程的 pid

2. $! :上一个后台进程的 pid

可以使用这两个指令来获取相应的进程 pid。例如,如果需要获取某个正在执行的进程的 pid(并写入指定的文件):

myCommand && pid=$! myCommand

& echo $! >/path/to/pid.file

注意,在脚本中执行 $!

只会显示子 Shell 的后台进程 pid,如果子 Shell

先前没有启动后台进程,则没有输出。

查看指定进程是否存在

在获取到 pid 之后,还可以根据 pid 查看对应的进程是否存在(运行),这个方法也可以用于 kill 指定的进程。

if ps -p

$

PID

> /dev/null

then

echo "

$

PID

is running"

#

Do something knowing the pid exists, i.e. the process

with

$

PID

is running

转载地址:http://tdnzx.baihongyu.com/

你可能感兴趣的文章
tmux不自动加载配置文件.tmux.conf
查看>>
经验分享:JavaScript小技巧
查看>>
[MOSEK] Stupid things when using mosek
查看>>
程序实例---栈的顺序实现和链式实现
查看>>
服务的使用
查看>>
Oracle 用户与模式
查看>>
MairDB 初始数据库与表 (二)
查看>>
拥在怀里
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>
OSChina 五一劳动节乱弹 ——女孩子晚上不要出门,发生了这样的事情
查看>>