Prozessverwaltung
-
Cool_pi -
4. September 2014 um 11:58 -
Erledigt
Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
-
-
Prozessverwaltung? Schau mal ob du hier fündig wirst!
-
Ich verstehe Deine Frage nicht.
Der Prozess, der seine Arbeit getan hat, kann sich ganz normal beenden. Also wird sich der Kindprozess irgendwann aus dem System verabschieden.
Sicher kannst Du ihn mit kill() ebenfalls beenden. Ob Du den Elternprozess ebenfalls beendest, bleibt Dir überlassen.
Die Kindprozesse werden vom System auch beendet, wenn der Elternprozess beendet wird.
Das ist allerdings unsauber und es gibt Ausnahmefälle.cu,
-ds- -
-
Das passt so weit ... nur kann PID nicht 0 sein.
Den Prozess gibt es nicht - der erste, der exisitiert ist der "Ur-init" mit pid 1.
Wenn pid 0 ist, befindest Du Dich im Kindprozess und brauchst nur einen return() oder exit() machen.
cu,
-ds- -
-
Also mal abgesehen davon, dass es
...
... Standardeinstellung...
...
heisst, kenne ich SIGCOM nicht.
Das Signal heisst afaik SIGCONT und sollte auch funktionieren ...cu,
-ds- -
Oh, sorry
habe mich gleich 2 mal verschrieben.
Aber auch SIGCONT geht nicht. Von der Tastatur meines PC schicke ich 1, der Prozess wird angehalten. Mit 2 möchte ich fortfahren, doch es funktioniert nicht.case '1':
kill (pid, SIGKILL)
break;
case '2'
kill (pid, SIGCONT)
break; -
...
kill (pid, SIGSTOP)
...SIGKILL würgt den Prozess ab ...
btw: schön, dass Du die meisten Deiner alten Threads mittlerweile auf erledigt gesetzt hast ...
cu,
-ds- -
Ja, da waren sehr gute Tipps dabei. Danke
Ich meinte natürlich SIGSTOP.
So sollte das heißen:
case'3'
kill(pid, SIGKILL)
break;
case'1'
kill(pid, SIGSTOP)
break;
case'2'
kill(pid,SIGCONT)
break; -
-
killall Prozessname ist doch bash.
Ich möchte das in C machen.
Beenden funktioniert jetzt.Wie gesagt die Pause wird aufgerufen, aber der Befehl Pause beenden wird ignoriert.
So sieht es aus.
Codecase'3' kill(pid, SIGKILL) break; case'1' kill(pid, SIGSTOP) break; case'2' kill(pid,SIGCONT) break;
Vielleicht so was probieren?
void sigfunc(int sig)
{if(sig == SIGSTOP)
pause();
else
printf("Keine Pause");
} ? -
Kannst Du versuchen, das über einen eigenen Handler zu machen.
Ich muss da jetzt echt passen ob man diese stop/continue Funktionalität explizit selbst einbauen muss oder ob das OS das übernimmt. Ich würde da eher auf letzteres tippen. Mal sehen, evtl. probier ich das mal aus, wenn ich wieder aus der Stadt zurück bin.
Hast Du es schon mal mit kill -18 <pid> bzw. kill -19 <pid>auf der Kommandoebene probiert?//EDIT:
Also ... ist schon so, wie ich mir das dachte ... STOP/CONT wird vom OS behandelt. Alles andere wäre auch irgendwie unlogisch ...C
Alles anzeigen#include "stdio.h" #include "unistd.h" #include "signal.h" #include <sys/types.h> #include <sys/wait.h> main(argc, argv, envp) int argc; char *argv[], *envp[]; { pid_t child; int i; int cldstat; if( (child = fork()) < 0 ) { fprintf(stderr, "fork() failed!\n"); return(1); } else { if(child == 0) { // child for(i=0; i < 30; i++) { fprintf(stderr, "%ld\n", time(NULL)); sleep(2); } return(0); } else { sleep(10); kill(child, SIGSTOP); sleep(10); kill(child, SIGCONT); } } wait(&cldstat); return(0); }
cheers,
-ds-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!