Ho creato un piccolo server in C++ che dovrebbe girare come demone, vorrei però lanciare l'eseguibile compilato da un altro programma scritto in C++, il tutto su ambiente UNIX like o Linux.

È possibile fare una cosa del genere?

chiesto 28 Dec '13, 21:57

RyanJ93's gravatar image

RyanJ93
60559

modificato 29 Dec '13, 10:41

enzotib's gravatar image

enzotib ♦♦
14.1k113187


Certo che è possibile, utilizzando le funzioni fork ed execl.
La prima crea un processo figlio che eredita molte cose dal padre, compreso il codice da eseguire, mentre la seconda lancia un programma esterno.
Ecco un esempio in cui il padre genera un processo figlio, poi conta fino a dieci (giusto per continuare a fare qualcosa), mentre il figlio conta fino a cinque e poi esegue il processo esterno "/bin/ls", con opzioni "-ld":

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

int child();

int main() {

  pid_t pid;
  int i;

  printf("Processo padre prima del fork\n");

  if ((pid = fork()) == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
  }
  if (pid == 0)
    return child();

  printf("Processo padre dopo il fork\n");
  for (i = 1; i <= 10; ++i) {
    printf("padre  : %2d\n", i);
    sleep(1);
  }

  return 0;
}

int child() {

  int i;

  printf("Processo figlio, eseguo il programma esterno\n");
  for (i = 1; i <= 5; ++i) {
    printf("figlio : %2d\n", i);
    sleep(1);
  }
  if (execl("/bin/ls", "/bin/ls", "-ld", "/", (char *)NULL) == -1) {
    perror("execl");
    exit(EXIT_FAILURE);
  }

  return 0;
}
coll. permanente

ha risposto 29 Dec '13, 09:33

enzotib's gravatar image

enzotib ♦♦
14.1k113187

modificato 29 Dec '13, 09:34

Perfetto, funziona, grazie mille!

(30 Dec '13, 11:03) RyanJ93 RyanJ93's gravatar image

@RyanJ93: prego, però non usare le risposte, che servono per proporre soluzioni, usa invece i commenti.

(30 Dec '13, 11:12) enzotib ♦♦ enzotib's gravatar image

Giusto, scusate!

(31 Dec '13, 00:33) RyanJ93 RyanJ93's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×109
×37

domanda posta: 28 Dec '13, 21:57

domanda visualizzata: 3,884 volte

ultimo aggiornamento: 30 Jun '24, 08:26

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.