Problem mit Prozessliste
-
Hallo, ich schreibe gerade ein Shell-Programm und habe ein Problem mit der Implementierung der Prozessliste.
Ich habe eine Datenstruktur 'process', welche ich in einem globalen Array 'plist' speichere:
typedef struct { int pid; int pgid; char* name; int showed; } Process;
[...]
p->pid = pid; p->pgid = pid; p->name = k->u.einfach.worte[0]; p->showed = 0;
In einer anderen Funktion werden diese Werte wieder ausgegeben:
p = plist[n]; printf("%d\t%d\t%s\n",p->pid,p->pgid,p->name);
Der Name wird hier allerdings nicht mehr korrekt angezeigt, der Pointer scheint auf kein char Array mehr zu zeigen.
Jetzt hab ich schon einiges ausprobiert und sehe den Wald wohl vor Bäumen nicht mehr. Wie umgehe ich das Problem?Zum anderen möchte ich den Status der einzelnen pids erfragen, aber folgender Code scheint noch fehlerhaft zu sein, da er nicht immer die (meiner Ansicht nach) korrekten Ergebnisse liefert:
w = waitpid(p->pid,&status,WNOHANG); if(w==0){ meldung = "running"; id = 0; } else { if(WIFEXITED(status)){ meldung = "exit"; id = WEXITSTATUS(status); } else if(WIFSIGNALED(status)){ meldung = "signal"; id = WTERMSIG(status); } else if(WIFSTOPPED(status)){ meldung = "stop"; id = WSTOPSIG(status); } plist[n]->showed = 1; }
Fällt euch hier ein Fehler auf?
Ich hoffe, ihr könnt mir helfen. Wenn noch wichtiger Code oder Erklärungen fürs Verständnis fehlen, werde ich das umgehend nachreichen.
Gruß, Florian
-
snomann schrieb:
Der Name wird hier allerdings nicht mehr korrekt angezeigt, der Pointer scheint auf kein char Array mehr zu zeigen.
Das war das erste, woran ich gedacht habe, als ich deinen Codekrümel gesehen habe.
Wo kommt das k->u.einfach.worte[0]; her und wie ist es definiert?
snomann schrieb:
Wenn noch wichtiger Code oder Erklärungen fürs Verständnis fehlen, werde ich das umgehend nachreichen.
Ne, lass mal. Jeder Regular hier hat eine Glaskugel oder Tierinnereien, mit denen er das "sehen" kann.
-
Zu deinem char*-Problem: malloc + strcpy (und beim Löschen free aufrufen)
-
Th69 schrieb:
Zu deinem char*-Problem: malloc + strcpy (und beim Löschen free aufrufen)
Mit malloc hatte ich zwar auch schon einiges probiert, aber an strcpy hatte ich nicht gedacht. Vielen Dank für deine Hilfe!