2012-06-25 3 views
0
$cat t.sh 
grep "12" test | wc -c 

Я хочу знать, сколько процессов будет создано при его запуске. я использовалКак получить все имена процессов сценария оболочки?

./t.sh;ps -aux | grep "t.sh"  

, но это не сработало, потому что «./t.sh» было задавить, когда пс работал.

Как достичь этой цели?

ответ

1

В зависимости от системы, в которой вы работаете. Если у вас есть strace, вы можете проследить все системные вызовы fork. проблема заключается в том, что somesystems используют fork, некоторые vfork и некоторые clone, вам придется экспериментировать. По линии:

strace -c -f -evfork ./t.sh 

должен предоставить вам резюме. -c дает количество, -f означает «следовать» дочерним процессам, а -evfork означает трассировку вызова ядра vfork. Выход идет в stderr, но вы можете перенаправить его в файл с помощью опции -o (есть некоторые опрятные трюки, которые вы можете сделать, если здесь укажете именованный канал).

0

вы можете попробовать
./t.sh;ps -aux | grep -E "t.sh" -E матч именно то, что вам нужно, и ничего другого, я не буду не на Linux прямо сейчас, так что я не могу быть уверен, но есть что-то делать с этой опцией

+0

'-E' опция' grep' средства использовать расширенные регулярные выражения, а чем основные регулярные выражения. 'grep -E' эквивалентен (и в Linux точно такой же), как' egrep'. – cdarke

1

Ваша ошибка - точка с запятой. Он сообщает оболочке ждать завершения t.sh перед запуском grep. Вместо этого используйте амперсанд, чтобы сообщить оболочке запустить t.sh в фоновом режиме. Кроме того, вместо Grep вы бы лучше использовать pstree, чтобы увидеть список процессов, порожденных вашим t.sh сценарий, как это:

$ ./t.sh & pstree $(pgrep t.sh) 
Смежные вопросы