Avatar billede Slettet bruger
07. september 2001 - 10:29 Der er 18 kommentarer

unix g++: kør som deamon?

Når jeg køre mit program fra telnet til en linuxserver dræbes prgrammet nå telnet lukkes. Hvordan får jeg programmet til at køre som \"deamon\" så processen fortsætter??

Avatar billede mickni33 Nybegynder
07. september 2001 - 16:44 #1
Tror ikke rigtig det kan lade sig gøre. Word kører jo heller ikke når du lukker det
Avatar billede henrik_ffc Nybegynder
07. september 2001 - 17:19 #2
Prøv at skrive programnavn &
(navn efterfulgt af OG-tegn)
Avatar billede mickni33 Nybegynder
07. september 2001 - 17:22 #3
henrik>>
kører den så ikke bare i et andet vindue ?
Avatar billede henrik_ffc Nybegynder
07. september 2001 - 17:33 #4
Nope, den kører i baggrunden.
Selvom du lukker telnet session kører den videre indtil programmet slutter, du dræber det eller henter det frem i forgrunden med fg
Avatar billede moykal Nybegynder
08. september 2001 - 20:35 #5
Prøv:

nohup myProgram >& err.log &
Avatar billede moykal Nybegynder
08. september 2001 - 20:40 #6
Men dette er en baggrunds-process. Det gør det ikke til en dæmon. En dæmon skal tillige gøre nogle forskellige ting, således at det ikke hænger på terminalen, det skal eksekvere fra \"/\", således at det ikke forstyrer andre ting såsom \"mount\" - Se Roger Stevens. Og det kan kun gøres - så vidt jeg ved - INDE FRA PROGRAMMET SELV - hæng mig ikke lige op på det sidste:

Roger Stevens bog:

http://www.amazon.com/exec/obidos/ASIN/0201563177/qid=999974370/sr=2-2/104-0178779-2580775

Avatar billede henrik_ffc Nybegynder
08. september 2001 - 21:03 #7
Det er korrekt at en ægte deamon skal startes af programmet selv,
men jeg tror ikke det er hvad \"ras\" i virkelighed mangler.
Hvis det ER en deamon og ikke \'bare\' en baggrundsprocess der er
påkrævet er & IKKE nok.

En deamon startes af programmet selv, ved at programmet starter
en deamon process og derefter lukke sig selv ned. Derved er det kun
deamonen der fortsætte med at køre i baggrunden.
Avatar billede Slettet bruger
10. september 2001 - 15:32 #8
mickni33>> At sammenligne en unix process med Word er en grov forbrydelse : )
Avatar billede Slettet bruger
10. september 2001 - 15:36 #9
Da serveren står i kælderen, startes programmet via et telnet vindue. At jeg skriver & efter det får det ikke til at køre i baggrunden, det lukker stadig ned når telnet sessionen afsluttes. Nogle programmer kan derfor både startes som en almindelig process og som en \"deamon\". Mit spørgsmål er derfor, hvordan jeg gør det sidste.

Venligst Rasmus
Avatar billede Slettet bruger
10. september 2001 - 15:38 #10
henrik_ffc >> Det lyder fornuftigt, har du nogen ide om hvordan jeg koder dette???
Avatar billede henrik_ffc Nybegynder
10. september 2001 - 18:31 #11
Du programmerer det selv?

Check \"man fork\"
Avatar billede henrik_ffc Nybegynder
10. september 2001 - 18:36 #12
#include <stdio.h>

int main(void)
{  int pchild;

    if ( (pchild = fork()) == 0 )
    {
        int i;
        for ( i = 0; i < 10; i++ )
        {
            printf(\"Child #%d\\n\", i);
            sleep(1);
        }
        exit(500);
    }
    else if ( pchild > 0 )
    {
        int i, result;
        for ( i = 0; i < 7; i++ )
        {
            printf(\"Parent #%d\\n\", i);
            sleep(1);
        }
        printf(\"awaiting child\'s termination...\\n\");
        wait(&result);
        printf(\"Child\'s result=%d\\n\", result);
    }
    else
        perror(\"Fork failure\");
    exit(0);
}

Avatar billede Slettet bruger
10. september 2001 - 18:59 #13
Ok, det vil sige at så længe man køre køre det som fork() eller thread() så vil processen leve videre når man \"dræber\" telnet??
Avatar billede henrik_ffc Nybegynder
10. september 2001 - 20:25 #14
Det vil jeg tro, men MINE programmer fortsætter selvom jeg kun bruger &.
Jeg bruger SSH, men det burde ikke have nogen forskel....
Avatar billede Slettet bruger
10. september 2001 - 20:40 #15
Prøvede lige at køre en test med det kendte scanner program nmap. Programmet lukker ned ved afslutning af telnet, så det er intet med kodningen at gøre. Måske linux versionen (jeg bruger RH 7.1)?? Anyway, prøver at implementere fork() for at se om det hjælper.

Rasmus
 
Avatar billede henrik_ffc Nybegynder
10. september 2001 - 20:56 #16
Jeg bruger også RH7.1.

Jeg har lige testet således:

connecte til RH7.1 server med SSH
kør sleep 10m &
log ud
log ind
kør ps -A | grep sleep
og vupti den kører stadig....
Avatar billede Slettet bruger
10. september 2001 - 21:07 #17
Har lige prøvet det samme med alm. telnet:

connecte til RH7.1 server med telnet
kør sleep 10m &
disconnecte
connecte
kør ps -C sleep
og vupti den kører stadig ikke : )

Avatar billede henrik_ffc Nybegynder
10. september 2001 - 21:15 #18
pas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester