[LÖST]oops. avbryta Evighetsloop? (kill, killall, top mm)

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

[LÖST]oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.)
Senast redigerad av 1 cthulhu, redigerad totalt 22 gånger.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg av Konservburk »

Ta reda på vad ./program1 har för PPID:

Kod: Markera allt

pgrep program1 | xargs -r ps -oppid=
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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)
Senast redigerad av 1 cthulhu, redigerad totalt 21 gånger.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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. ;)
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg av cthulhu »

Va? que?
hmm.
Körde just kommandot, och det blev som jag sade. Loopen startar om "program1".
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg av cthulhu »

Ja det är det jag vill.
Ser ut som om varje gång jag kör det kommandot, och sedan

Kod: Markera allt

kill -9 [PPID]
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? ??? ::)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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:~> 
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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  
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.

Kod: Markera allt

ps -oppid= 28555
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.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: oops. avbryta Evighetsloop? (kill, killall, top mm)

Inlägg 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.
Skriv svar

Återgå till "Terminalforum"