2014-10-29 64 views
0

我想要在while循环中访问bash终端中某些进程的status.log文件并对它们进行比较。因此,由于PID不是静态的,我怎样才能使用它们的命令名访问它们的proc/PID文件,而不是使用PID?从bash中通过名称访问procfs中的进程

回答

0

尝试的命令的名称到grep从ps -A输出,并从那里得到PID

+0

是的,但在这之后我该如何使用的PID,而无需用户的任何输入?我的意思是我希望每次都按名称找到PID,并使用它们来达到进程状态 – ihavename 2014-10-29 12:34:16

+0

您可以修整grep的输出并将PID保存到变量 – 4rlekin 2014-10-29 12:41:36

0

您可以用这种方式

例子:

sleep 1000 & 
cd /proc/`pidof sleep` 

请参阅此链接man pidof

+1

您的示例仅适用于存在一个称为“sleep”的进程(您应该大概可以用'-s'选项调用'pidof',这样它在这种情况下返回一个PID) – Hasturkun 2014-10-29 12:39:01

+0

@ Hasturkun,'cd'命令只接受忽略其他参数的第一个参数。 – Kalanidhi 2014-10-29 12:41:54

+0

@KalanidhiM。如果编号最低的“睡眠”过程是错误的呢? – chepner 2014-10-29 13:18:37

0

假设你有pgrep(你应该知道它是procps的一部分),请拨打pgrep -x somecmdname以获得与该字符串匹配的PID列表。从那里你可以照常访问proc文件。

例如

for pid in `pgrep -x somecmd`; do 
echo $pid #or do something more interesting 
done 
0

尝试命令pidof

$ pidof bash 
14317 10465 7204 3514 3466 

然后你可以遍历的PID:

$ for pid in $(pidof bash); do echo "$pid" ; done 
14317 
10465 
7204 
3514 
3466 
相关问题