在外壳脚本可以说,我已经运行这样壳牌脚本获取命令PID
for i in `ps -ax|grep "myproj"`
do
echo $i
done
这里的命令,grep命令将作为一个单独的处理被执行。那么我如何在shell脚本中获得它的PID?
在外壳脚本可以说,我已经运行这样壳牌脚本获取命令PID
for i in `ps -ax|grep "myproj"`
do
echo $i
done
这里的命令,grep命令将作为一个单独的处理被执行。那么我如何在shell脚本中获得它的PID?
我在这里出门,理解这看起来更像是一条评论。
为什么你需要grep
命令的PID?
在你的评论中,你说你想在循环中对比某件事。我认为这是你的问题,该循环将(有时)不仅包括myproj
,但也是一个关于你的grep命令的项目?如果是这样,请尝试以下操作:
for i in `ps -ax | grep -v grep | grep "myproj"`
do
echo $i
done
的-v
开关基本上反转的格局,所以grep -v grep
(或grep -v "grep"
,这可能看起来少了几分尴尬)将只包括行不包含字符串的“grep”(见man grep)。 请注意,在某些情况下,这可能过于模糊,例如,如果实际查找的模式还包含字符串“grep”。例如,以下可能无法按预期工作:ps -ax | grep -v grep | grep mygrepling
但是,在您的特定情况下,只查找“myproj”,它会执行此操作。
或者你可以简单地使用
for i in `ps -ax | grep "my[p]roj"`
do
echo $i
done
这样,也没有必要知道grep命令的PID,因为它根本不会显示为一个循环迭代。
当你在后台运行的进程,则可以得到其PID在$!
$ ps aux | grep dddddd & echo $!
[1] 27948
27948
ic 27948 0.0 0.0 3932 760 pts/3 R 08:49 0:00 grep dddddd
当前景---过程中不会再在你想找到它的PID点存在。当你在循环中时,for语句已经执行并且grep
已经退出,所以你不能再找到它的PID了。
谢谢!我必须在后台运行它才能获得它的PID。 :) – Cygnus
当然你可以做到,但也可能有其他方法来解决你的任务。在后台运行grep并找到它的PID,好吧......这有点奇怪:) –
如果你找到它,你将如何处理它的PID?当它可用时,命令已经完成,所以PID不再有效。 –
假设我在循环中获得它与某个值进行比较? – Cygnus