Sida 1 av 1
[LÖST]oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:21
av cthulhu
Jag har just skrivit ett program som kör ett annat program i en evighetsloop i C++:
Kod: Markera allt
#include <iostream> //för cout m.m
#include <cstdlib> //för rand() mm.
using namespace std;
int main(){
for (;;)
system("./program1");
return 0;
}
Och PID:en för detta "master-control-program" som kör programmet "program1" verkar inte synas, utan man ser bara PID:en för "program1" i "top" (eller "htop"). Dvs. avbryter jag "program1" med "kill" eller Ctrl+C så startar den bara en ny instans av programmet.
Verkar som att jag har uppnått det jag ville lite för bra....
(syftet är att felsöka ifall jag får segfault typ var tusende körning eller motsvarande.)
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:31
av Konservburk
Ta reda på vad
./program1 har för PPID:
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:42
av cthulhu
Nja, alltså program1:s PID är inte ett problem, det kan jag hitta och döda, men då startar detta "Überprogram" om det, det är där klurigheten ligger.
Eller har jag missförstått vad det är ditt kommando gör?
(kommer inte åt den aktuella datorn förens imorgon, varför en manuell reboot inte kan göras just nu. Har bara tillgång till den via ssh, vilket var hur jag startade programmet till att börja med)
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:44
av Konservburk
cthulhu skrev:Nja, alltså program1:s PID är inte ett problem, det kan jag hitta och döda, men då startar detta "Überprogram" om det.
Eller har jag missförstått vad det är ditt kommando gör?
Det är skillnad på PID och PPID.

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:47
av cthulhu
Va? que?
hmm.
Körde just kommandot, och det blev som jag sade. Loopen startar om "program1".
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:49
av Konservburk
Du vill ta reda på vad program1 har för förälder, vilket jag försökte visa dig hur man kan göra.
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 17:56
av cthulhu
Ja det är det jag vill.
Ser ut som om varje gång jag kör det kommandot, och sedan
så startar den en ny instans av "program1", så nu har jag tre stycken "program1" som ligger och kör. (körde kommandot två ggr.)
Vad har jag nu gjort för fel?

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:06
av Konservburk
Det kanske är barnbarn eller barnbarnsbarn du har att göra med? Förstätt leta reda på PPID nivå efter nivå tills du hittar källan till problemet. Kommer du upp till PPID 1 så har du nog ett program som skapar daemoner.
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:12
av cthulhu
Exakt! har två stycken PPID 1 nu.
Hur går jag upp i hirarkin?
Tex får jag nu följande:
Kod: Markera allt
polly@marvin:~> pgrep jmp1 | xargs -r ps -oppid=
1
1
28555
polly@marvin:~>
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:23
av Konservburk
Att du har två PPID 1 där beror nog bara på att du dödade föräldraprocesserna så att de blev föräldralösa och därför adopterades av init. Det intressanta är vilken PPID processen 28555 har.
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:31
av cthulhu
Oj, nu blev jag förvirrad igen, är 28555 en PPID eller PID? och hur tar jag reda på det du skrev?
Det intressanta är vilken PPID processen 28555 har.
Kommer de föräldralösa "program1" att "självdö? dvs. när de är klara kommer de inte starta om förmodar jag eftersom jag dödade deras morsa.
(program1 är en simulering som tar ca någon timme att köra.)
såhär ser top ut:
Kod: Markera allt
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28556 polly 39 19 32944 25m 984 R 40 0.6 13:46.01 program1
28501 polly 39 19 32368 24m 984 R 40 0.6 16:26.59 program1
21456 polly 39 19 32368 24m 984 R 39 0.6 47:01.88 program1
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:45
av Konservburk
cthulhu skrev:Oj, nu blev jag förvirrad igen, är 28555 en PPID eller PID? och hur tar jag reda på det du skrev?
PPID för barnet är samma sak som vanlig PID för föräldern.
cthulhu skrev:Kommer de föräldralösa "program1" att "självdö? dvs. när de är klara kommer de inte starta om förmodar jag eftersom jag dödade deras morsa.
(program1 är en simulering som tar ca någon timme att köra.)
Du borde kunna döda de föräldralösa
program1 redan nu. Om de självdör eller inte beror helt på hur programmen är skrivna. Det kan inte jag veta.
Re: oops. avbryta Evighetsloop? (kill, killall, top mm)
Postat: 21 apr 2010, 18:56
av cthulhu
det går sisådär, (lyckades döda de föräldralösa processerna) men tusen tack för hjälpen.
EDIT: AHH, stänger jag terminalfönstret så dör allt. Misstänker att det var ssh eller något som höll loopen igång, trots att jag dödat föräldrarprocessen.