0

下面是一个脚本:

$ cat test.sh
#!/bin/sh
echo ------------------------
date
OCCURANCE=`ps -ef|grep "test.sh" | grep -vc grep`
ps -ef|grep "test.sh" | grep -vc grep
ps -ef|grep "test.sh" | grep -v grep
echo $OCCURANCE

Linux 中的输出:

------------------------
Mon Apr 29 10:36:38 GMT 2013
1
tmon 15565  7469  0 10:36 pts/0    00:00:00 /bin/sh ./test.sh
2

SunOS 中的输出:

------------------------
Monday, April 29, 2013 10:33:47 AM GMT
1
tmon 21248 17305   0 10:33:48 pts/7       0:00 /bin/sh ./test.sh
1

根据代码,两个数值应该相同。但是,为什么 SunOS 是真的而 Linux 是假的呢?

4

2 回答 2

1

在 Linux 中,由反引号生成的子 shell 在其输出中有一个条目,ps其中包含 string test.sh。在 Sun 上,它没有。

于 2013-04-29T12:28:32.060 回答
1

/bin/sh在您的 Linux 系统上可能是指向bash. 您的脚本正在启动一个子shell,从而导致另一个进程。

另一方面,子shellksh不要求单独的进程。尝试在 中运行您的代码ksh,您将看到预期的输出。

同样,在 SunOS 上使用的 shell 不太可能是bash. 如果您尝试bash在 Solaris 上使用,您会发现与在 Linux 上类似的行为。

于 2013-04-29T14:09:41.830 回答