Я новичок в unix-like. И я встретил странную проблему, которую я действительно не могу найти, отвечая на поиски.команда ps в linux
#!/bin/bash
me=`basename "$0"`
echo $(ps -e | grep "$me" | wc -l)
ps -e | grep "$me" | wc -l
После выполнения этого Баш скрипт, эхо показывает мне 2, а пс просто показывает мне 1, которая является то, что я хочу. Как это может произойти? Почему эхо показывает мне дополнительный процесс?
Подробнее: [Более элегантный »ps aux | grep -v grep "] (http://stackoverflow.com/q/9375711/3776858) – Cyrus
' $() 'создает подоболочку - раздвоенную копию вашей оболочки. Таким образом, пока вы используете 'echo $ (ps -e | grep) $ me" | wc -l) ', на самом деле есть еще * процессы, которые соответствуют вашему выражению. –
Это говорит о том, что grepping через 'ps' является абсолютно плохой практикой и не должен выполняться для какого-либо автоматизированного использования. Хотя существуют такие инструменты, как 'pgrep' и такие, которые работают над некоторыми предостережениями, если вы намерены определить, запущена ли программа, есть гораздо лучшие способы сделать это. –