LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1295|回复: 3

很奇怪的进程数量

[复制链接]
发表于 2003-4-18 06:14:42 | 显示全部楼层 |阅读模式
写一个mm.sh ,内容如下
#!/bin/bash

ps -A | grep mm.sh

就这么简单。
可是我多运行几次之后发现有时会出现两个mm.sh进程!
如果加多一行会更离谱,80%会出现多运行了进程:
#!/bin/bash

ps -A | grep mm.sh
ps -A | grep mm.sh

不信试试!请老手解释一下吧
发表于 2003-4-18 09:05:14 | 显示全部楼层
我认为产生两个进程并不奇怪,因为跟你使用的|管道有关,ps -A是一个进程,他产生信息输出,而grep也打开了一个进程,他把ps的输出作为自己的接受的输入,如果你要使用多个|,进程数量还得多.
如:
avalee//home/javalee>ps
  PID TTY          TIME CMD
  530 pts/0    00:00:00 ksh
  636 pts/0    00:00:00 ps        #当前进程为636
javalee//home/javalee>cat /proc/meminfo|grep 'MemFree'|awk '{print $2}'
43412
javalee//home/javalee>ps
  PID TTY          TIME CMD
  530 pts/0    00:00:00 ksh
  640 pts/0    00:00:00 ps                #执行三个操作后和一个ps之后的进程数640
javalee//home/javalee>free
             total       used       free     shared    buffers     cached
Mem:        252340     208964      43376          0       2480      99996
-/+ buffers/cache:     106488     145852
Swap:       610460          0     610460
javalee//home/javalee>ps
  PID TTY          TIME CMD
  530 pts/0    00:00:00 ksh
  642 pts/0    00:00:00 ps                #两个操作进程数加2,即642
javalee//home/javalee>cat /proc/meminfo|grep 'MemFree'|awk '{print $2}'
43240
javalee//home/javalee>ps
  PID TTY          TIME CMD
  530 pts/0    00:00:00 ksh
  646 pts/0    00:00:00 ps                #又有cat,grep,awk和ps死个,646
javalee//home/javalee>
伴随你的操作,进程数量是不断增加,所以一个程序/命令如果开启进程太多的话,并没有好处,只会浪费资源,可以利用协处理的方式减少产生进程数,即用|&先将一个命令通过管道放入后台,需要重复处理信息传输给协进程,这样,就比不用协进程要省很多进程数量,这是我的理解,欢迎讨论;)
 楼主| 发表于 2003-4-18 15:18:47 | 显示全部楼层
我没有把输出给你看,你肯定不信...不过现在已经知道问题出在哪了。
我运行时,输出是
debian:/tmp$ ./mm.sh
1367 pts/2    00:00:00 mm.sh
1369 pts/2    00:00:00 mm.sh


其实第二个1369进程是"grep mm.sh",不知道为何,我在debian unstable的ps命令(3.1.8版)硬是取不到正确的信息,在stable上的ps(2.0.7版)完全没问题。
发表于 2003-4-18 16:17:05 | 显示全部楼层
ps版本的差异?
我用的是rh,ps本本:
procps version 2.0.7
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表