trsh

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

trsh
hi,

@mikey:

22008 1   0:000   0:000 sleep 5
22006 1   0:000   0:000 sleep 2000 &
22005 1   0:000   0:000 sleep 1000 &

habe ich in deiner trsh.log gefunden.

  1. anscheinend ist es normal, dass die joblist die prozesse in umgekehrter reihenfolge speichert, d. h. wenn du z. b.
    sleep 1000 &
    sleep 2000 &
    eingibst, dann gibt er bei jobs
    […] sleep 2000 &
    […] sleep 1000 &
    aus. genauso schreibt er es auch in die logdatei, wenn du die prozess mit einem interrupt killst. ist das so korrekt?

  2. wahrscheinlich hast du die 3 prozesse mit einem interrupt gekillt, aber woher kommt bei dir dann der exitstatus 1? mit dem makro WEXITSTATUS sammle ich da nur nullen ein…

  3. wo genau war der fehler in der joblist vom i4sp? koenntest du bitte nochmal die stelle aufzeigen, wo das free fehlt?

1000 dank,
-steppenwolf


hi,

  1. Die Reihenfolge in der ich in die logdatei schreibe ist die in der die zombies aufgelesen werden. ich denke mal die reihenfolge spielt keine rolle, ergibt sich eben daraus das die jobliste an den beginn anfügt und ich sie von vorne durchlaufe…
    in die Logdatei schreibe ich in der Reihenfolge in der eben die Zombies aufgesammelt werden, die sollte im Normalfall die Reihenfolge sein in der die Prozesse terminieren.

  2. bei WIFSIGNALED gebe ich eben ein WEXITSTATUS(EXIT_FAILURE) aus.

  3. in der delete_item gibt es nur ein free von dem element, es wurde aber vergessen auch den im element enthaltenen info string freizugeben, das habe ich in meiner version noch ausgebessert…

Gruss Mike


ok, das ist also die zeile
free(current->info);
, die habe ich jetzt noch in die i4sp-version hinzugefuegt…

ausserdem halte ich mich im moment fuer total bescheuert, weil mein makefile nicht funktioniert duck. wo ist hier der fehler?

.PHONY: all, install, clean

CC = gcc
CFLAGS = -ansi -D_XOPEN_SOURCE=500 -pedantic-errors -Wall -Werror -g

all: trsh

trsh: trsh.o, joblist.o
        $(CC) $(CFLAGS) -o trsh trsh.o joblist.o

trsh.o: trsh.c, joblist.h
        $(CC) $(CFLAGS) -c trsh.c

joblist.o: joblist.h, joblist.c
        $(CC) $(CFLAGS) -c joblist.c

install: trsh
        cp trsh ../bin.i386/

clean:
        rm -f joblist.o trsh.o trsh

auf jeden fall sagt er mir immer
make: *** No rule to make target trsh.o,', needed by trsh’. Stop.

dabei hat er doch eine regel fuer trsh.o!


ob er da ein Komma akzeptiert bin ich mir net sicher, ich machs ohne:
trsh: trsh.o joblist.o

auserdem glaub ich nicht, dass der
(CC) (CFLAGS) -c trsh.c
eine trsh.o erstellt eher eine a.out oder sowas, schreib da stattdessen besser:
(CC) (CFLAGS) -c -o trsh.o trsh.c


ok, danke, das mit dem komma war es!
wenn man die fehlermeldung genau anschaut, sieht man auch, dass er nach dem target “trsh.o,” sucht und nicht nach “trsh.o”. das andere geht auch ohne -o, habe es jetzt aber trotzdem mal hinzugefuegt.


tatsache, hab grad in der manpage nachgeguckt:

Wenn man kein -c macht, erzeugt der gcc by default die a.out


2 Fragen:

Es ist ja so, dass all meinen Hintergrund-Prozessen ein SIGQUIT geschickt werden soll, wenn ich meinen Vordergrundprozess mit nem Interrupt beende. Kann es sein, dass bei diesem SIGQUIT das WIFEXITED für die Hintergrundprozesse nicht auf True gesetzt wird?

Und zweitens: Wenn ich stattdessen mit WIFSIGNALED abfrage (das durch das SIGQUIT auf TRUE gesetzt wird), darf ich danach den Exitstatus mit WEXITSTATUS abfragen? In der man-page zu waitpid steht, dass dieses Makro nur im WIFEXITED-Fall abgefagt werden darf. Das mit WEXITSTATUS(EXIT_FAILURE) funzt bei mir nämlich nicht - er gibt trotzdem ne 0 und keine 1 aus!


@tsunami:

alles richtig, was du geschrieben hast! und das mit dem WEXITSTATUS (EXIT_FAILURE) geht wirklich nicht, aber so:

if (WIFSIGNALED (status)) exitstatus = EXIT_FAILURE;

geht es. have fun!


hmm… Vielen Dank erstmal, aber meinst du mit “exitstatus” jetzt WEXITSTATUS oder status? :smiley:


hmm… damliche Frage eigentlich… :-p habs hingekriegt!
Thanx a lot, Steppenwolf! :cheesy:


kein problem!

wie du wohl festgestellt hast, ist “exitstatus” der wert, den ich spaeter ausgebe…

sleep
wie ist das eigentlich mit diesem sleep-problem, also aufgabe 5 c).
Bei mir funktioniert das noch nicht. ich gebe folgendes in meine trsh ein:

sleep 10 &
sleep 100

dann terminiert aber mein “sleep 100” befehl schon nach maximal 10 sekunden.

woran liegt das und wie kann ich das beheben?

Außerdem habe ich probleme, nachdem ich in meiner trsh einen Prozess im Hintergrund laufen hab lassen, zumbeispiel den befehl “ls -l” oder “ps u” auszuführen. diese prozesse scheinen dann irgendwie nicht mehr zu terminieren.also sie machen noch die ausgabe, aber der prompt kommt nicht mehr … wenn ich hingegen diese befehle aufrufe, ohne vorher bereits in meine trsh irgendeinen prozess mit “&” in den Hintergrund geschoben zu haben, terminieren sie wie gewünscht …

und woran könnte das nun liegen ? :slight_smile:

entschuldigt, vielleicht sind die fragen zu trivial, nur habe ich große probleme mit der aufgabe 5 und bin grad bei teilaufgabe c) (Aufgabe 6 hingegen ist fertig)

Gruß