Ich glaube nicht, dass ich genau verstehe, was Sie fragen ... Bitte fügen Sie eine Erklärung hinzu.
Aber von dem, was ich zu verstehen glaube, nein .
Eine Analogie könnte sein:
Wenn ich Person A beobachte und sehe, mit wem sie sprechen, kann ich dann die Absicht von Person A bestimmen?
In diesem Fall ist diese Antwort ziemlich trübe. Möglicherweise können Sie sehen, dass Person A mit einer wichtigen Person der Strafverfolgung und möglicherweise einigen Personen, die mit der organisierten Kriminalität in Verbindung stehen, spricht. Es wird jedoch extrem schwierig (unmöglich?), Die Motive von Person A mit Sicherheit zu bestimmen. Sind sie ein verdeckter Polizist oder ein Verbrecher mit einem Richter unter dem Daumen?
Sie können nichts verlässlich allein in dieses Wissen einlesen.
Wenn Sie weitere Informationen ermitteln konnten, z. B. die E / A, die ausgeführt wird, sind Sie auf dem besten Weg, die Situation klarer zu verstehen.
Wenn Sie sich also jede Datei ansehen (dargestellt durch Dateideskriptoren in einer entsprechenden Reihenfolge wie 0-X), können Sie dann die Art des Prozesses und / oder der Unterprozesse angeben?
Ich denke, Sie sind etwas verwirrt, was ein " Dateideskriptor " ist. Ein Dateideskriptor wird durch eine einfache Zahl ( int
) - den Rückgabewert von open()
... - identifiziert. Im Kernel sind jedoch einem Dateideskriptor Informationen zugeordnet. Siehe struct file
.
Ich glaube, die Antwort wäre ja, wenn tatsächlich der gesamte Prozess nur aus diesen Dateien besteht.
Dies ist auch ein Beweis für ein Missverständnis. Ein Verfahren ist nicht „ aus nur diesen Dateien vorgenommen “, sondern stattdessen Zugriff auf diese Dateien jetzt . Wir können dies zeigen, indem Sie Folgendes ausführen:
$ ls -l /proc/self/fd total 0 lrwx------ 1 attie attie 64 May 20 15:20 0 -> /dev/pts/3 lrwx------ 1 attie attie 64 May 20 15:20 1 -> /dev/pts/3 lrwx------ 1 attie attie 64 May 20 15:20 2 -> /dev/pts/3 lr-x------ 1 attie attie 64 May 20 15:20 3 -> /proc/13103/fd
Wie @grawity in einem Kommentar hervorgehoben hat, open()
wird der nächste freie Dateideskriptor zurückgegeben, der etwaige Lücken von Null füllt. Was Sie oben sehen, ist eine Momentaufnahme der Dateien, die derzeit geöffnet sind und sich im Laufe der Zeit ändern.
Sie können die ls
Binärdatei in der obigen Liste oder ihre unmittelbaren Abhängigkeiten nicht sehen:
$ ldd $(which ls) linux-vdso.so.1 => (0x00007fff569ef000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007feeb33df000) libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007feeb31d7000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feeb2e0e000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007feeb2bd0000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feeb29cc000) /lib64/ld-linux-x86-64.so.2 (0x00007feeb361a000) libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007feeb27c6000)
Wenn Sie versuchen, " auszuführenls
", liest der Linker tatsächlich die Bibliotheksdateien zum Sortieren und "Verknüpfen" des gesamten Prozessabbilds. Wenn die ls
Ausführung beginnt, sind diese Daten bereits im Speicher und die Dateien sind nicht mehr "offen".
Einige Anwendungen verwenden möglicherweise 'Plugins' oder laden 'dynamisch' zusätzliche Dateien, die Funktionalität bereitstellen (siehe dlopen()
). Dies ist jedoch ein Randfall, der alles andere als typisch ist - keiner der Prozesse, die derzeit auf meinem Computer ausgeführt werden, verfügt über ein gemeinsames Objekt ( *.so
) Datei öffnen.
Zusammenfassend und in Übereinstimmung mit meiner ursprünglichen Antwort, Nr .
Es gibt keine definitive Möglichkeit, das Verhalten eines Prozesses zu bestimmen, indem untersucht wird, welche Dateien geöffnet sind.
Das Bestimmen der Art eines Teilprozesses ist unmöglich - können Sie init
die vollständige Laufzeitkonfiguration eines Systems betrachten und bestimmen? Nein .