Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-09-16 11:10:22

  szewczyk - Stary wyjadacz :P

szewczyk
Stary wyjadacz :P
Zarejestrowany: 2006-12-03

C - program jako proces w tle

witam
pisze sobie kod w C ,który wysyła dane przez rs232 na AVR+LCD podłoczonymi do niego ,całosc fajnie chodzi tylko chciałbym aby program uruchamiał sie w tle jako proces ,jak tego dokonać ?

Offline

 

#2  2008-09-16 11:38:53

  urug - Członek DUG

urug
Członek DUG
Skąd: Częstochowa
Zarejestrowany: 2008-04-22
Serwis

Re: C - program jako proces w tle

Najprościej uzyć funkcji daemon (man daemon). Jesli chcesz możesz użyć fork (man fork), ale daemon prościej :P

Jeszcze prościej - odpalić program na screenie:
$ screen program
Ale to już nie programowo :P


Pozdrawiam, Tomek

Offline

 

#3  2008-09-16 11:42:38

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: C - program jako proces w tle

Kod:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

static void daemonize(void)
{
    pid_t pid, sid;

    /* already a daemon */
    if ( getppid() == 1 ) return;

    /* Fork off the parent process */
    pid = fork();
    if (pid < 0) {
        exit(EXIT_FAILURE);
    }
    /* If we got a good PID, then we can exit the parent process. */
    if (pid > 0) {
        exit(EXIT_SUCCESS);
    }

    /* At this point we are executing as the child process */

    /* Change the file mode mask */
    umask(0);

    /* Create a new SID for the child process */
    sid = setsid();
    if (sid < 0) {
        exit(EXIT_FAILURE);
    }

    /* Change the current working directory.  This prevents the current
       directory from being locked; hence not being able to remove it. */
    if ((chdir("/")) < 0) {
        exit(EXIT_FAILURE);
    }

    /* Redirect standard files to /dev/null */
    freopen( "/dev/null", "r", stdin);
    freopen( "/dev/null", "w", stdout);
    freopen( "/dev/null", "w", stderr);
}

int main( int argc, char *argv[] ) {
    daemonize();

    /* Now we are a daemon -- do the work for which we were paid */


    return 0;
}

http://www.itp.uzh.ch/~dpotter/howto/daemonize
Google rox! ;)

Ostatnio edytowany przez milyges (2008-09-16 11:43:25)

Offline

 

#4  2008-09-16 11:46:09

  urug - Członek DUG

urug
Członek DUG
Skąd: Częstochowa
Zarejestrowany: 2008-04-22
Serwis

Re: C - program jako proces w tle

Kod:

#include <unistd.h>
#include <stdio.h>

int main() {
    daemon(0,0);
    
    // :D
    sleep (10);


}

:P


Pozdrawiam, Tomek

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)