J'essaie de faire quelque chose d'un peu bizarre ici. Je dois lancer un processus, logcat, à partir d'un démon qui fonctionnera en arrière-plan et imprimer sur le terminal sans prendre le contrôle de stdin. C'est pour la journalisation idéalement alors logcat imprimera des messages de journal tout en permettant à l'utilisateur d'entrer des commandes standard et d'initialiser des programmes à partir du shell. Voici le code pour le démon que j'ai jusqu'ici. Le programme, logcat, démarre et affiche les messages du journal, mais je ne peux pas entrer de commandes dans stdin car il semble que le programme ait pris le contrôle de stdin.Démarrer un processus en arrière-plan sous Linux avec C
int main (int argc, char** argv, char** env)
{
int fd;
if ((fd = open("/dev/console", O_RDWR)) < 0) {
fd = open("/dev/null", O_RDWR);
}
printf("THIS IS A TEST\n");
dup2(1, fd);
dup2(2, fd);
pid_t childpid = fork();
if(childpid == -1) {
perror("Failed to fork, logcat not starting");
return 1;
}
if(childpid == 0) {
//this is the child, exec logcat
setsid();
int execReturn = execl("/system/bin/logcat", "logcat", (char *) 0);
} else {
//this is the parent do nothing
close(fd);
return 0;
}
close(fd);
return 0;
}
Merci
Merci beaucoup pour votre excellente réponse en profondeur. Le problème était le stdin comme vous l'avez mentionné. J'ai dû rediriger de logcat à stdin, avec d'autres choses comme démoniser le processus. Cela m'a sauvé tellement de stress et d'inquiétude. Merci encore, je l'apprécie vraiment. – Mike