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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.


Stary wyjadacz :P



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


Członek DUG
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
Offline



inż.
#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


Członek DUG