Kindprozess name zuweisen?
-
Hi,
ich habe ein kleines Programm geschrieben (linux), dass sich mit fork() kopiert. In der Ausgabe von "ps" werden die beiden Programme nun mit dem selben Namen aufgeführt. Ist es irgendwie möglich, dass ich dem Kindprozess einen anderen Namen als der des Vaters verpasse? Evtl. zusammen mit der fork() Anweisung?
Ansonsten würde es mir auch helfen, wenn man (mal abgesehen von fork()) den Programmnamen während der Laufzeit ändern könnte? Dann würde ich diese Methode eben innerhalb des Kind Prozesses durchführen.
Mein Programm heisst z.B. test, und nachdem es sich kopiert hat möchte ich, dass der Vater weiterhin test heisst und das Kind Kind. Lässt sich das irgendwie realisieren?
Bin dankbar für jede Hilfestellung.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich glaube nicht dass das geht. alternativ könntest du statt fork einen anderes programm aufrufen. das hätte dann den gewünschten namen.
-
Doch das geht wunderbar.
Der Name wird von ps nämlich selbst über argv[0] ausgelesen, also wenn du argv[0] überschreibst, wird der Name angezeigt:
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <string.h> int main(int argc, char **argv) { pid_t pid=fork(); if(pid == -1) { perror("fork"); return 1; } else if(pid == 0) { memset(argv[0], 0, strlen(argv[0])); memcpy(argv[0], "moep", 5); usleep(100000000); } else { wait(0x0); } }
-
Hey ruedi, hoerst du keine Musik oder bist du nicht gewillt, die preise für cds zu bezahlen?
-
kingruedi schrieb:
Doch das geht wunderbar.
Der Name wird von ps nämlich selbst über argv[0] ausgelesen, also wenn du argv[0] überschreibst, wird der Name angezeigt
Nicht zu vergessen natürlich dass der neue Name maximal so lang sein sollte wie der alte, sonst überschriebt man sich nämlich wer-weiß-was. Ist schreiben in argv[i] eigentlich wirklich gestattet oder geht es nur? Ich meine dass es beim Environment ne kritische Sache war, da urmzuschreiben, wie stehts hiermit?
-
Ich kann mir nicht vorstellen, warum das gefährlich sein sollte. Im Endeffekt werden die Parameter wohl in /proc/<pid>/cmdline abgelegt und von dort referenziert. PS wird also nichts weiter tun, als diese Datei auszulesen und dann argv[0] als Name anzuzeigen.
.honk schrieb:
Hey ruedi, hoerst du keine Musik oder bist du nicht gewillt, die preise für cds zu bezahlen?
Ich hör fast ausschließlich Musik von unabhängigen Labels, die nicht zur Musikindustrie gehören. Ich sehe es nicht ein, dass man Firmen unterstützen sollte, die alles dafür tun, gegen die eigenen Kunden vorzugehen. Aber das wird jetzt zu OT.
-
Hi,
vielen Dank für eure Hilfe, bei mir klappt das aber nicht so recht. Wenn ich kingruedis code compile und starte haben beide prozesse den selben namen, den ursprünglichen.
edit:
Es funktioniert doch. Ich kenne mich mit linux nur noch nicht so sehr aus und habe den Unterschied der Ausgaben ps und ps -u wohl noch nicht ganz verstanden.
-
kingruedi schrieb:
Ich kann mir nicht vorstellen, warum das gefährlich sein sollte. Im Endeffekt werden die Parameter wohl in /proc/<pid>/cmdline abgelegt und von dort referenziert. PS wird also nichts weiter tun, als diese Datei auszulesen und dann argv[0] als Name anzuzeigen.
z.B. könnten davon irgendwo kopien liegen, die dan nicht mehr synchron sind, der Speicher könnte schreibgeschützt sein auf manchen Systemumgebungen etc. etc.
-
Warum ändert ihr arvc[0] nicht vor dem fork und danach wieder zurück? selbst wenn man dann eine Kopie anlegt, ist sie gleich