2016-10-09 6 views
0

Я пытаюсь посмотреть, что произойдет с системным вызовом, когда я запустил одну команду, но, похоже, эта команда после | не отображается? например:Почему strace -f не может отслеживать прогресс ребенка после |?

strace -f cat a.txt| cat 

Кажется, strace и -f периметр могут показать весь процесс. Я думаю, что последняя часть - это прогресс ребенка, созданный вилкой. Почему и как это сделать?

ответ

1

Из справочника strace (внимание мое).

-f Трассировка дочерние процессы, как они созданы в настоящее время отслеживаемых процессов в результате вилке (2), vfork (2) и клон (2) системные вызовы.

Прослеженный процесс в вашем случае является первым процессом cat. Второй процесс cat - не ребенок первого cat процесс. Вилка выполняется оболочкой.

Один из способов добиться того, что вы хотите, чтобы проследить оболочки:

strace -f bash -c "cat a.txt| cat" 
+0

К сожалению, я должен использовать '' не cat' cats'. (вы можете обновить его, чтобы ваш ответ был идеальным). Теперь я использую ваше предложение (замените кошек на кошку). Я все еще не вижу команду fork() в выходе, вы знаете, почему? – fourth

+0

В оболочке bash используется 'clone' not' fork'. Ищите это вместо этого. – kaylum

+0

О, ты потрясающий! – fourth

 Смежные вопросы

  • Нет связанных вопросов^_^