lance le processus avec fork et exec en redirigeant stdout vers / dev / null

J’ai un problème très spécifique pour lequel je suis incapable de trouver la réponse après de nombreuses recherches. J’ai un programme Linux. Son travail consiste à lancer un autre exécutable secondaire (via fork() et exec() ) lorsqu’il reçoit un message spécifique sur le réseau. Je n’ai pas access pour modifier l’exécutable secondaire.

Mon programme imprime tous ses TTY sur stdout, et je le lance généralement via ./program > output.tty Le problème que j’ai est que ce deuxième exécutable est très prolixe. Il imprime simultanément sur stdout tout en insérant le même TTY dans un fichier journal. Donc, mon fichier output.tty contient les deux stream de sortie.

Comment puis-je configurer les choses de sorte que le TTY de l’exécutable secondaire soit redirigé vers /dev/null ? Je ne peux pas utiliser system() car je ne peux pas me permettre d’attendre le processus enfant. J’ai besoin de pouvoir tirer et d’oublier.

Merci.

Dans le processus enfant, utilisez dup2() pour redirect la sortie vers un fichier.

 int main(int argc, const char * argv[]) { pid_t ch; ch = fork(); int fd; if(ch == 0) { //child process fd = open("/dev/null",O_WRONLY | O_CREAT, 0666); // open the file /dev/null dup2(fd, 1); // replace standard output with output file execlp("ls", "ls",".",NULL); // Excecute the command close(fd); // Close the output file } //parent process return 0; } 

Dans le processus enfant, avant d’appeler exec , vous devez fermer le stream de sortie standard.

 pid_t pid =fork(); if (pid == 0) { close(1); // call exec } else if (pid > 0) { // parent }