在调试相关问题时,我注意到pgrep正在为看似随意的命令行模式返回一个PID,例如:
$sudo pgrep -f "asdf"
13017
$sudo pgrep -f ";lkj"
13023
$sudo pgrep -f "qwer"
13035
$sudo pgrep -f "poiu"
13046
$sudo pgrep -f "blahblahblah"
14038
$sudo pgrep -f "$(pwgen 16 1)"
14219
没有sudo的相同命令没有返回任何内容(如预期的那样):
$pgrep -f blahblahblah
我试图将PID传递给ps,以便查看命令是什么,但这不起作用:
$sudo pgrep -f blahblahblah | xargs ps -f -p
UID PID PPID C STIME TTY TIME CMD
看起来这个过程太快了.然后我尝试使用ps和grep,但这也不起作用(即没有结果):
$sudo ps -e -f | grep [a]sdf
$sudo ps -e -o command | grep asdf
grep asdf
我也注意到,如果我足够快地重新命令,那么似乎PID正在稳步攀升:
$for i in $(seq 1 10); do sudo pgrep -f $(pwgen 4 1); done
14072
14075
14078
14081
14084
14087
14090
14093
14096
14099
$for i in $(seq 1 10); do sudo pgrep -f blahblahblah; done
13071
13073
13075
13077
13079
13081
13083
13085
13087
13089
作为一个完整性检查,我尝试使用find和grep来搜索proc目录:
$sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14113/cmdline matches
Binary file /proc/14114/cmdline matches
$sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14735/cmdline matches
Binary file /proc/14736/cmdline matches
似乎PID正在攀升并且cmdline匹配任意字符串.
我在CentOS 6.7和Ubuntu 12.04上尝试了相同的结果.当我在我的Mac上尝试类似的实验时,测试结果是否定的 – 没有神秘的过程.
这里发生了什么?