2016-10-09 6 views
0

Ich versuche zu sehen, was passieren würde, wenn ich einen Befehl ausführen, aber es scheint, dass diese Befehle nach | kann nicht gezeigt werden? wie:Warum strace -f den Kindfortschritt nach | nicht verfolgen kann?

strace -f cat a.txt| cat 

Es scheint strace und -f Umfang kann den gesamten Prozess zeigen. Ich denke, der letzte Teil ist in dem von gabel erstellten Kindfortschritt. Warum und wie man es macht?

Antwort

1

Aus dem strace Handbuch (Schwerpunkt meins).

-f Kindprozesse Trace, wie sie von derzeit verfolgt Prozesse geschaffen werden als Folge der Gabel (2), vfork (2) und Klon (2) Systemaufrufe.

Der verfolgte Prozess in Ihrem Fall ist der erste cat Prozess. Der zweite cat Prozess ist nicht ein Kind der ersten cat Prozess. Die Gabelung erfolgt durch die Schale.

Ein Weg, was Sie erreichen wollen, ist die Schale zu verfolgen:

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

Sorry, sollte ich 'verwenden cat' nicht' cats'. (Sie können es aktualisieren, um Ihre Antwort perfekt zu machen) Jetzt benutze ich Ihren Satz (ersetzen Sie Katzen mit Katze). Ich kann den Befehl fork() in der Ausgabe immer noch nicht sehen. Weißt du warum? – fourth

+0

Die Bash-Shell verwendet 'clone' nicht' fork'. Suchen Sie stattdessen danach. – kaylum

+0

Oh, du bist fabelhaft! – fourth

Verwandte Themen